Question

Si je devais utiliser une bibliothèque 3ème partie qui n'a pas été dans le dépôt public maven, quelle est la meilleure façon de l'inclure dans la dépendance pour mon projet de sorte que lorsque quelqu'un d'autre vérifie mon code, il sera toujours en mesure de construire ?

i.e..

Ma demande « A » dépend de pot « B » qui n'existe pas dans le dépôt public. Je tiens cependant à ajouter « B » comme une dépendance à « A » de sorte que lorsqu'une personne de l'autre côté du monde pouvait vérifier le code et être encore capable de construire « A »

Était-ce utile?

La solution

Vous pouvez installer vous-même le projet.

Vous pouvez aussi utiliser la portée de 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 nécessite le chemin absolu du projet. Pour le rendre plus facile, si le fichier jar se trouve dans le répertoire / projet, vous pouvez utiliser la propriété ${basedir}, qui est lié à la racine du projet.

Autres conseils

Si vous avez un projet parent avec un module qui se trouve dans cette situation (nécessite une dépendance non dans un dépôt), vous pouvez configurer votre projet parent d'utiliser le plugin exec-maven-plugin pour installer automatiquement votre fichier dépendant. Par exemple, je devais le faire avec le fichier jar authorize.net car il est pas accessible au public.

Parent POM:

<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 pot est dans le dossier lib du module « service ».

Au moment où le module de service entre dans la phase de validation, le pot sera disponible dans le dépôt local. Il suffit de faire référence à la façon dont vous configurez le groupId, artefact, etc dans la pom-mère. Par exemple:

<dependency>
    <groupId>net.authorize</groupId>
    <artifactId>anet-java-sdk</artifactId>
    <version>1.4.6</version>
</dependency>

En utilisant la portée du système peut fonctionner, mais il est déconseillé même dans la spécification Maven. il est portable.

du livre Maven:

  

Système- La portée du système est similaire à prévu sauf que vous   doivent fournir une       chemin d'accès explicite au JAR sur le système de fichiers local. Ceci est destiné à permettre la compilation       contre des objets natifs qui peuvent faire partie des bibliothèques système. L'artefact est supposé       être toujours disponible et n'est pas regardé dans un dépôt. Si vous déclarez la portée de       être système, vous devez également fournir l'élément systemPath. Notez que ce champ n'est pas       recommandé (vous devez toujours essayer de référencer les dépendances dans un Maven public ou sur mesure       dépôt).

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

ce qui est très facile si vous utilisez un gestionnaire de dépôt comme Nexus.

D'une manière générale, vous devez d'abord mettre le pot 3ème partie dans votre dépôt local. Après cela, vous pouvez l'utiliser en ajoutant la dépendance en pom.xml.

Par exemple.

1.Mettre le pot dans votre dépôt local d'abord:

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

Remarque: cette commande nécessite la version maven-plugin-installation 2.5 ou version ultérieure. Sinon, vous pouvez consulter

2.Utilisez le pot en ajoutant la dépendance dans le pom.xml de vous projet.
il suffit d'ajouter 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.you peut alors conditionner ou déployer votre projet en cours d'exécution ou mvn package mvn deploy

Le pot 3ème partie sera également inclus dans le package.

Si vous utilisez la suite d'outils groovy / graal ( GGTS ), vous pouvez importer directement que la dépendance des tiers (mais assurez-vous que la dépendance d'un tiers dans votre référentiel local) en utilisant étapes ci-dessous:

  1. Accédez au projet et cliquez sur Explorateur droit sur le projet.
  2. Cliquez sur Importer .
  3. Développer l'option maven et sélectionnez Installer ou déployer une artefact à un repository et cliquez sur Suivant.
  4. Sourcils et sélectionnez cette dépendance par des tiers en utilisant Fichier d'artefact option et entrer dans le détail de Groupe Id, artefact Id et Version en utilisant pom.xml fichier et cliquez sur Terminer

Attendez un moment et peut-être l'erreur aurait disparu à ce problème.

Cette solution a fonctionné pour moi; 1. Création local-maven-repo dans le répertoire racine de mon projet et tous mes pots copié dans le 2. Exécuté la commande suivante pour générer les fichiers etc pom nécessaires et des métadonnées pour chaque pot que je devais utiliser;

mvn deploy:deploy-file -DgroupId=<somegroupid> -DartifactId=<someartifact> -Dversion=1.0.0 -Durl=file:./local-maven-repo/ -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile=<path to jar file>

Ceci a généré un nouveau fichier jar avec un fichier pom dans le Maven local repo et je suis en mesure d'inclure dans mon projet comme une dépendance comme celui-ci;

    <dependency>
        <groupId>somegroupid</groupId>
        <artifactId>someartifact</artifactId>
        <version>1.0.0</version>
    </dependency>

Alors que mes mvn package a assuré les dépendances du projet sont résolus et emballés avec mon dossier de guerre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top