web-dev-qa-db-fra.com

Maven: Y compris le pot introuvable dans le référentiel public

Si je devais utiliser une bibliothèque tierce qui n'était pas dans le référentiel public maven, quelle est la meilleure façon de l'inclure comme dépendance pour mon projet afin que quand quelqu'un d'autre extrait mon code, il sera toujours en mesure de construire?

c'est à dire.

Mon application "A" dépend du pot "B" qui n'existe pas dans le référentiel public. Je souhaite cependant ajouter "B" en tant que dépendance à "A" de sorte que lorsqu'une personne à l'autre bout du monde puisse consulter le code et être en mesure de créer "A"

61
digiarnie

Vous pouvez installer le projet vous-même.

Ou vous pouvez utiliser la portée system comme suit:

<dependency>
    <groupId>org.group.project</groupId>
    <artifactId>Project</artifactId>
    <version>1.0.0</version>
    <scope>system</scope>
    <systemPath>${basedir}/lib/project-1.0.0.jar</systemPath>
</dependency>

systemPath requiert le chemin absolu du projet. Pour vous faciliter la tâche, si le fichier jar se trouve dans le référentiel/projet, vous pouvez utiliser ${basedir}, propriété liée à la racine du projet.

60
notnoop

Si vous avez un projet parent avec un module qui se trouve dans cette situation (nécessite une dépendance qui n'est pas dans un référentiel), vous pouvez configurer votre projet parent pour utiliser le plug-in exec-maven-plugin pour installer automatiquement votre fichier dépendant. Par exemple, j'ai dû le faire avec le fichier jar authorize.net car il n'est pas accessible au public.

POM parent:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <inherited>false</inherited>
            <executions>
                <execution>
                    <id>install-anet</id>
                    <phase>validate</phase>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <executable>mvn</executable>
                <arguments>
                    <argument>install:install-file</argument>
                    <argument>-Dfile=service/lib/anet-Java-sdk-1.4.6.jar</argument>
                    <argument>-DgroupId=net.authorize</argument>
                    <argument>-DartifactId=anet-Java-sdk</argument>
                    <argument>-Dversion=1.4.6</argument>
                    <argument>-Dpackaging=jar</argument>
                </arguments>
            </configuration>
        </plugin>
    </plugins>
</build>

Dans l'exemple ci-dessus, l'emplacement du bocal se trouve dans le dossier lib du module "service".

Au moment où le module de service entre dans la phase de validation, le bocal sera disponible dans le référentiel local. Il vous suffit de le référencer dans la façon dont vous configurez le groupid, l'artefact, etc. dans le pom parent. Par exemple:

<dependency>
    <groupId>net.authorize</groupId>
    <artifactId>anet-Java-sdk</artifactId>
    <version>1.4.6</version>
</dependency>
16
Domenic D.

L'utilisation de la portée du système peut fonctionner, mais elle n'est pas recommandée même dans la spécification Maven. ce n'est pas portable.

du livre Maven:

système - L'étendue du système est similaire à celle fournie, sauf que vous devez fournir un chemin explicite vers le fichier JAR sur le système de fichiers local. Ceci est destiné à permettre la compilation sur des objets natifs qui peuvent faire partie des bibliothèques système. L'artefact est supposé toujours disponible et n'est pas recherché dans un référentiel. Si vous déclarez l'étendue système, vous devez également fournir l'élément systemPath. Notez que cette portée n'est pas recommandée (vous devez toujours essayer de référencer les dépendances dans un référentiel Maven public ou personnalisé).

La meilleure approche consiste à installer sur votre référentiel local ou sur votre référentiel d'entreprise pour être accessible à tous vos pairs.

c'est très simple si vous utilisez un gestionnaire de référentiel tel que Nexus.

15
rperez

De manière générale, vous devez d'abord placer le pot tiers dans votre référentiel local. Après cela, vous pouvez l'utiliser en ajoutant la dépendance dans pom.xml.

Par exemple.

1. placez d'abord le pot dans votre référentiel local:

mvn install:install-file -Dfile=<path-to-file>

Remarque: cette commande nécessite maven-install-plugin version 2.5 ou ultérieure. Sinon, vous pouvez vous référer à ici

2. utilisez le pot en ajoutant la dépendance dans le pom.xml de votre projet.
ajoutez simplement ceci dans le pom.xml de votre projet:

<dependency>
  <groupId>${the groupId in the jar's pom.xml}</groupId>
  <artifactId>${the artifactId in the jar's pom.xml}</artifactId>
  <version>${the version in the jar's pom.xml}</version>
</dependency>

3. vous pouvez ensuite empaqueter ou déployer votre projet en exécutant mvn package ou mvn deploy

Le pot tiers sera également inclus dans le package.

1
Chen Zhu

Si vous utilisez la suite d'outils groovy/grail ( GGTS ), vous pouvez directement importer cette dépendance tierce (mais assurez-vous d'avoir cette dépendance tierce dans votre référentiel local) en utilisant les étapes ci-dessous:

  1. Allez dans l'Explorateur de projets et faites un clic droit sur le projet.
  2. Cliquez sur l'option import.
  3. Développez l'option maven et sélectionnez Installer ou déployer un artefact dans un référentiel maven et cliquez sur Suivant.
  4. Parcourez et sélectionnez cette dépendance tierce en utilisant l'option Fichier d'artefact et entrez les détails de ID de groupe, ID d'artefact et version en utilisant le fichier POM.xml et cliquez sur terminer

Attendez un moment et peut-être qu'une erreur aurait disparu pour ce problème.