Question Comment ajouter des fichiers jar locaux à un projet Maven?


Comment puis-je ajouter des fichiers jar locaux (qui ne font pas encore partie du référentiel Maven) directement dans les sources de la bibliothèque de mon projet?


792
2018-02-10 10:03


origine


Réponses:


Installez le fichier JAR dans votre référentiel Maven local comme suit:

mvn install:install-file
   -Dfile=<path-to-file>
   -DgroupId=<group-id>
   -DartifactId=<artifact-id>
   -Dversion=<version>
   -Dpackaging=<packaging>
   -DgeneratePom=true

Où chacun se réfère à:

  <path-to-file>: le chemin vers le fichier à charger, par exemple -> c: \ kaptcha-2.3.jar

<group-id>: le groupe dans lequel le fichier doit être enregistré sous e.g -> com.google.code

<artefact-id>: le nom de l'artefact pour le fichier, par exemple -> kaptcha

<version>: la version du fichier par exemple -> 2.3

<emballage>: l'emballage du fichier, par ex. -> pot

Référence


429
2018-02-10 10:08



Vous pouvez directement ajouter des dépendances locales (comme mentionné dans Construire le projet Maven avec les bibliothèques propriétaires inclus) comme ça:

<dependency>
    <groupId>com.sample</groupId>
    <artifactId>sample</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/yourJar.jar</systemPath>
</dependency>

1010
2018-03-10 13:02



Tout d'abord, je voudrais donner le crédit pour cette réponse à l'utilisateur anonyme de stackoverflow - je suis sûr que j'ai déjà vu une réponse similaire auparavant - mais maintenant je ne peux pas le trouver.

La meilleure option pour avoir des fichiers jar locaux en tant que dépendances est de créer un référentiel maven local. Un tel repo n'est rien d'autre qu'une structure de répertoire appropriée avec des fichiers pom.

Sur mon exemple: J'ai un projet de master sur ${master_project} location et subroject1 est activé ${master_project}/${subproject1}

alors je crée le dépôt mvn dans: ${master_project}/local-maven-repo

En fichier pom dans le sous-projet1 situé ${master_project}/${subproject1}/pom.xml Le référentiel doit être spécifié, ce qui prend le chemin du fichier comme paramètre url:

<repositories>
    <repository>
        <id>local-maven-repo</id>
        <url>file:///${project.parent.basedir}/local-maven-repo</url>
    </repository>
</repositories>

La dépendance peut être spécifiée comme pour n'importe quel autre référentiel. Cela rend votre référentiel pom indépendant. Par exemple, une fois que jar désiré est disponible dans Maven Central, vous avez juste besoin de le supprimer de votre dépôt local et il sera tiré du repo par défaut.

    <dependency>
        <groupId>org.apache.felix</groupId>
        <artifactId>org.apache.felix.servicebinder</artifactId>
        <version>0.9.0-SNAPSHOT</version>
    </dependency>

La dernière chose à faire est d'ajouter le fichier jar au référentiel local en utilisant le commutateur -DlocalRepositoryPath comme ici:

mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file  \
    -Dfile=/some/path/on/my/local/filesystem/felix/servicebinder/target/org.apache.felix.servicebinder-0.9.0-SNAPSHOT.jar \
    -DgroupId=org.apache.felix -DartifactId=org.apache.felix.servicebinder \
    -Dversion=0.9.0-SNAPSHOT -Dpackaging=jar \
    -DlocalRepositoryPath=${master_project}/local-maven-repo

Le fichier jar Onece est installé tel que le repo mvn peut être affecté au référentiel de code et l'ensemble est indépendant du système. (exemple de travail dans github)

Je suis d'accord que les JARs engagés dans le repo de code source n'est pas une bonne pratique mais dans la vraie vie, une solution rapide et sale est parfois préférable à un dépôt de nexus pour héberger un pot que vous ne pouvez pas publier.


82
2018-02-27 10:17



Créer un nouveau dossier, disons local-maven-repo à la racine de votre projet Maven.

Ajoutez simplement un repo local dans votre <project> de votre pom.xml:

<repositories>
    <repository>
        <id>local-maven-repo</id>
        <url>file:///${project.basedir}/local-maven-repo</url>
    </repository>
</repositories>

Ensuite, pour chaque jar externe que vous voulez installer, allez à la racine de votre projet et exécutez:

mvn deploy:deploy-file -DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] -Durl=file:./local-maven-repo/ -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile=[FILE_PATH]

75
2018-04-13 14:55



<dependency>
    <groupId>group id name</groupId>
    <artifactId>artifact name</artifactId>
    <version>version number</version>
    <scope>system</scope>
    <systemPath>jar location</systemPath>
</dependency>

24
2018-01-09 08:48



Je voudrais une telle solution - utilisation maven-install-plugin dans le fichier pom:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-install-plugin</artifactId>
            <version>2.5.2</version>
            <executions>
                <execution>
                    <phase>initialize</phase>
                    <goals>
                        <goal>install-file</goal>
                    </goals>
                    <configuration>
                        <file>lib/yourJar.jar</file>
                        <groupId>com.somegroup.id</groupId>
                        <artifactId>artefact-id</artifactId>
                        <version>x.y.z</version>
                        <packaging>jar</packaging>
                    </configuration>
                </execution>
            </executions>
        </plugin>

Dans ce cas, vous pouvez effectuer mvn initialize et le pot sera installé dans le repo local de maven. Maintenant, ce pot est disponible lors de n'importe quelle étape maven sur cette machine (ne pas oublier d'inclure cette dépendance comme toute autre dépendance maven dans pom avec <dependency></dependency> marque). Il est également possible de lier jar install à initialize étape, mais toute autre étape que vous aimez.


20
2017-07-12 21:58



Oui, vous pouvez avoir mais ce n'est pas une bonne idée.

Au lieu de cela, installez tous ces pots à Maven repos

Regarde aussi


14
2018-02-10 10:06



Une façon est de le télécharger dans votre propre gestionnaire de référentiel Maven (tel que Nexus). C'est une bonne habitude d'avoir son propre gestionnaire de dépôt de toute façon.

Une autre façon sympa que j'ai vu récemment est d'inclure le plugin Install Maven dans votre cycle de vie de construction: Vous déclarez dans le POM pour installer les fichiers dans le référentiel local. C'est un peu mais petit frais généraux et aucune étape manuelle impliquée.

http://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html


9
2018-02-10 10:39



Ajoutez votre propre fichier JAR local dans le fichier POM et utilisez-le dans la version maven.

mvn install:install-file -Dfile=path-to-jar -DgroupId=owngroupid -DartifactId=ownartifactid -Dversion=ownversion -Dpackaging=jar

Par exemple:

mvn install:install-file -Dfile=path-to-jar -DgroupId=com.decompiler -DartifactId=jd-core-java -Dversion=1.2 -Dpackaging=jar

Ensuite, ajoutez-le au POM comme ceci:

enter image description here


8
2017-07-05 06:22



Bien sûr, vous pouvez ajouter des jars à ce dossier. Mais peut-être que ce n'est pas ce que vous voulez accomplir ...

Si vous avez besoin de ces jars pour la compilation, vérifiez cette question connexe: Puis-je ajouter des jars à maven 2 buildpath sans les installer?

Aussi, avant que quelqu'un ne le suggère, n'utilisez PAS la portée du système.


7
2018-02-10 10:15