65 votes

Maven: Incluant un pot introuvable dans le référentiel public

Si je devais utiliser une bibliothèque tierce qui ne se trouvait pas dans le référentiel public maven, quel est le meilleur moyen de l'inclure en tant que dépendance pour mon projet afin que, lorsque quelqu'un vérifie mon code, il puisse toujours le générer?

c'est à dire

Mon application "A" dépend du fichier "B" qui n'existe pas dans le référentiel public. Cependant, je souhaite ajouter "B" en tant que dépendance à "A", de sorte que lorsqu'une personne à l'autre bout du monde puisse consulter le code tout en restant capable de construire "A"

65voto

notnoop Points 30218

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 faciliter les choses, si le fichier jar se trouve dans le référentiel / projet, vous pouvez utiliser la propriété ${basedir} , qui est liée à la racine du projet.

18voto

Domenic D. Points 1265

Si vous avez un projet parent avec un module qui se trouve dans cette situation (nécessite une dépendance non dans un référentiel), vous pouvez configurer votre projet parent utilisation de l'exec-maven-plugin plugin à installer automatiquement votre fichier dépendant. Par exemple, j'ai eu à faire avec la authorize.net jar fichier car il n'est pas publiquement disponible.

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 de la jarre est dans le dossier lib du "service" module.

Au moment où le module de service entre la validation de la phase, le pot sera disponible dans le dépôt local. Simplement référence à elle dans la manière dont vous configurez l'id de groupe, artefact, etc dans le pom parent. Par exemple:

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

15voto

rperez Points 2171

En utilisant le système peut fonctionner mais il n'est pas recommandé, même dans le Maven spécification. il n'est pas portable.

depuis Maven livre:

système - Le système de la portée est similaire sauf que vous fournir un chemin d'accès explicite le POT sur le système de fichiers local. Cette mesure est destinée à permettre la compilation contre les objets natifs qui peuvent faire partie du système de bibliothèques. L'artefact est supposé d'être toujours disponible et n'est pas recherché dans un référentiel. Si vous déclarez la portée de le système, vous devez également fournir les systemPath élément. Notez que ce champ n'est pas recommandé (vous devriez toujours essayer de référence dépendances dans un établissement public ou personnalisé Maven référentiel).

La meilleure approche consiste à installer sur votre dépôt local ou à votre référentiel d'entreprise pour être accessible à tous les jeunes de votre âge.

c'est très facile si vous utilisez un référentiel à l'aide de Nexus.

0voto

Si vous utilisez groovy/graal outil de suite (GGTS) ensuite, vous pouvez directement importer que le tiers de la dépendance (mais assurez-vous que vous avez que la troisième partie de la dépendance dans votre référentiel local) à l'aide de la procédure ci-dessous :

  1. Accédez à l'Explorateur de Projet et cliquez droit sur le projet.
  2. Cliquez sur importer option.
  3. Dépenser l' maven et choisissez l'option de les Installer ou de les déployer un artefact à un référentiel , puis cliquez sur suivant.
  4. Les sourcils et sélectionnez-le tiers de la dépendance à l'aide Artefact Fichier option et saisissez les détails de l'Id de Groupe, Artifact Id et la Version à l'aide de POM.xml fichier et cliquez sur terminer

Attendre un certain moment et, éventuellement, l'erreur serait allé à ce problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X