Comment ajouter des fichiers jar locaux à un projet Maven?

comment ajouter des fichiers jar locaux (qui ne font pas encore partie du dépôt Maven) directement dans les sources de la bibliothèque de mon projet?

824
demandé sur MozenRath 2011-02-10 13:03:26

27 réponses

installez le bocal dans votre dépôt 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 à:

< chemin-vers-fichier >: le chemin vers le fichier à charger.e.g -> c:\kaptcha-2.3.jar

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

< artifact-id >: le nom d'artefact pour le fichier E. g - > kaptcha

< version >: la version du fichier E. g - > 2,3

< emballage >: l'emballage du fichier, p.ex. - > jar

référence

452
répondu user373455 2018-07-31 18:11:51

vous pouvez ajouter des dépendances locales directement (comme mentionné dans projet build maven avec les bibliothèques de propriété inclus ) comme ceci:

<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>
1071
répondu Alireza Fattahi 2018-02-24 07:14:01

tout d'abord je voudrais donner crédit à cette réponse à l'utilisateur anonyme de stackoverflow - je suis presque sûr que j'ai déjà vu une réponse similaire ici - mais maintenant je ne peux pas la trouver.

la meilleure option pour avoir des fichiers jar locaux comme dépendance est de créer un dépôt maven local. Un tel repo n'est rien d'autre qu'une structure de répertoire avec des fichiers pom.

sur mon exemple: J'ai le projet principal sur ${master_project} emplacement et le sous-Projet1 est sur ${master_project}/${subproject1}

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

Dans le pom de fichier dans subproject1 situé ${master_project}/${subproject1}/pom.xml référentiel doit être spécifié qui permettrait de prendre le chemin du fichier comme un paramètre de l'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 tout autre dépôt. Cela rend votre dépôt pom indépendant. Par exemple, une fois que le pot désiré est disponible dans maven central vous avez juste besoin de le supprimer de votre local repo et il sera tiré à partir de défaut des pensions.

    <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 dépôt 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 de L'Onece est installé de sorte que mvn repo peut être engagé dans un dépôt de code et que l'ensemble de la configuration est indépendant du système. ( exemple de travail dans github )

je suis d'accord que le fait d'avoir des Pots commis à la source code repo n'est pas une bonne pratique, mais dans la vraie vie solution rapide et sale parfois est mieux que nexus repo complet pour accueillir un pot que vous ne pouvez pas publier.

83
répondu JJ Roman 2015-02-27 19:19:33

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

il suffit d'ajouter une déclaration locale à l'intérieur de 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 pot 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]
77
répondu Anthony O. 2017-02-21 04:54:09
<dependency>
    <groupId>group id name</groupId>
    <artifactId>artifact name</artifactId>
    <version>version number</version>
    <scope>system</scope>
    <systemPath>jar location</systemPath>
</dependency>
24
répondu Satish Karuturi 2017-05-23 20:16:32

j'aimerais une telle solution - utiliser 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 jar sera installé dans Maven repo locale. Maintenant ce jar est disponible pendant n'importe quelle étape maven sur cette machine (n'oubliez pas d'inclure cette dépendance comme toute autre dépendance maven dans pom avec <dependency></dependency> tag). Il est également possible de lier jar install non pas à initialize étape, mais toute autre étape que vous aimez.

21
répondu sphinks 2016-07-12 21:58:10

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

install Instead all these jars to maven reposs

Voir Aussi

14
répondu Jigar Joshi 2017-05-23 11:47:36

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

une autre façon agréable que j'ai vu récemment est d'inclure le Plugin Maven Install dans votre cycle de vie de construction: vous déclarez dans le POM pour installer les fichiers dans le dépôt local. C'est un petit mais petit plafond et pas de marche manuelle.

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

9
répondu Puce 2017-03-30 04:40:50

ajoutez votre propre pot local dans le fichier POM et utilisez-le dans Maven build.

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

puis l'ajouter au POM comme ceci:

enter image description here

8
répondu Tummidi Phani Kumar 2017-07-05 06:44:52

bien sûr, vous pouvez ajouter des pots à ce dossier. Mais peut-être que ce n'est pas ce que vous voulez atteindre...

si vous avez besoin de ces pots pour la compilation, cochez cette question connexe: puis-je ajouter des pots à maven 2 build classpath sans les installer?

aussi, avant que quelqu'un le suggère, ne pas utiliser la portée du système.

7
répondu Cephalopod 2017-05-23 12:10:54

ligne de commande:

mvn install:install-file -Dfile=c:\kaptcha-{version}.jar -DgroupId=com.google.code
-DartifactId=kaptcha -Dversion={version} -Dpackaging=jar
6
répondu Hassani 2017-11-30 15:04:12

la façon préférée serait de créer votre propre dépôt distant.

Voir ici pour plus de détails sur la façon de le faire. Jetez un oeil à la section ' du téléchargement vers un dépôt distant ".

3
répondu Simeon 2011-02-10 10:43:29

un autre cas intéressant est quand vous voulez avoir dans votre projet des jarres privées maven. Vous pouvez vouloir garder les capacités de Maven pour résoudre les dépendances transitives. La solution est assez simple.

  1. créer un dossier libs dans votre projet
  2. Ajouter les lignes suivantes dans votre pom.fichier xml

    <properties><local.repository.folder>${pom.basedir}/libs/</local.repository.folder>
    </properties>
    
    <repositories>
       <repository>
            <id>local-maven-repository</id>
            <url>file://${local.repository.folder}</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
       </repository>
    </repositories>
    
  3. ouvrir le .m2 / dépôt dossier et copier la structure du répertoire du projet que vous souhaitez importer dans le dossier libs .

E. G. supposons que vous voulez importer la dépendance

<dependency>
    <groupId>com.mycompany.myproject</groupId>
    <artifactId>myproject</artifactId>
    <version>1.2.3</version>
</dependency>

continue .m2 / dépôt et vous verrez le dossier suivant

com/my company/myproject / 1.2.3

Copy tout dans votre dossier libs (encore une fois, y compris les dossiers sous ).m2 / dépôt ) et vous êtes fait.

3
répondu JeanValjean 2017-09-03 19:18:04

la manière vraiment rapide et sale est de pointer vers un fichier local:

<dependency>
      <groupId>sample</groupId>  
       <artifactId>com.sample</artifactId>  
       <version>1.0</version> 
      <scope>system</scope>
      <systemPath>C:\DEV\myfunnylib\yourJar.jar</systemPath>
</dependency>

Cependant, cela ne sera en direct sur votre machine (évidemment), pour le partage habituellement, il est logique d'utiliser un bon m2 d'archives (nexus/artifactory) ou si vous n'avez pas ou ne voulez pas installer un local maven structurés et configurer un "référentiel" dans votre pom: local:

<repositories>
    <repository>
        <id>my-local-repo</id>
        <url>file://C:/DEV//mymvnrepo</url>
    </repository>
</repositories>

distance:

<repositories>
    <repository>
        <id>my-remote-repo</id>
        <url>http://192.168.0.1/whatever/mavenserver/youwant/repo</url>
    </repository>
</repositories>
3
répondu fl0w 2018-08-02 06:47:03

regardez aussi...

<scope>compile</scope>

Les Dépendances Maven . C'est la valeur par défaut, mais j'ai trouvé que dans certains cas, définir explicitement que scope permet aussi de trouver des bibliothèques locales dans le dépôt local.

2
répondu kervin 2015-03-22 04:19:57

je veux partager un code où vous pouvez télécharger un dossier plein de bocaux. C'est utile quand un fournisseur n'a pas de dépôt public et que vous avez besoin d'ajouter beaucoup de bibliothèques manuellement. J'ai décidé d'en construire un .bat au lieu d'appeler directement à maven parce qu'il pourrait être hors des erreurs de mémoire. Il a été préparé pour un environnement windows mais est facile à adapter à linux OS:

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.jar.Attributes;
import java.util.jar.JarFile;
import java.util.jar.Manifest;

public class CreateMavenRepoApp {

    private static final String OCB_PLUGIN_FOLDER = "C://your_folder_with_jars";

    public static void main(String[] args) throws IOException {

    File directory = new File();
    //get all the files from a directory
    PrintWriter writer = new PrintWriter("update_repo_maven.bat", "UTF-8");
    writer.println("rem "+ new Date());  
    File[] fList = directory.listFiles();
    for (File file : fList){
        if (file.isFile()){               
        String absolutePath = file.getAbsolutePath() ;
        Manifest  m = new JarFile(absolutePath).getManifest();
        Attributes attributes = m.getMainAttributes();
        String symbolicName = attributes.getValue("Bundle-SymbolicName");

        if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject")) {
            String[] parts =symbolicName.split("\.");
            String artifactId = parts[parts.length-1];
            String groupId = symbolicName.substring(0,symbolicName.length()-artifactId.length()-1);
            String version = attributes.getValue("Bundle-Version");
            String mavenLine= "call mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -Dfile="+ absolutePath+" -DgroupId="+ groupId+" -DartifactId="+ artifactId+" -Dversion="+ version+" -Dpackaging=jar ";
            writer.println(mavenLine);          
        }

        }
    }
    writer.close();
    }

}

après avoir lancé cette main à partir de n'importe quel IDE, lancez la commande update_repo_maven.chauve.

2
répondu Luis Muzikant 2016-02-11 21:05:09

c'est une syntaxe courte pour les nouvelles versions:

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

il fonctionne lorsque le pot a été construit par Apache Maven - le cas le plus commun. Puis il va contenir un pom.xml dans un sous-dossier du répertoire META-INF, qui sera lu par défaut.

Source: http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html

2
répondu joro 2016-11-04 16:25:00

notez que ce n'est pas nécessairement une bonne idée d'utiliser un repo local. Si ce projet est partagé avec d'autres, alors tout le monde aura des problèmes et des questions quand il ne fonctionne pas, et le bocal ne sera pas disponible même dans votre système de contrôle source!

bien que le repo partagé soit la meilleure réponse, si vous ne pouvez pas le faire pour une raison quelconque, alors l'intégration du bocal est mieux qu'un repo local. Le contenu des pensions locales seulement peut causer beaucoup de problèmes, surtout au fil du temps.

1
répondu Frank 2016-04-26 06:35:06

sur votre dépôt local vous pouvez installer votre jar en émettant les commandes

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

suivez ce lien pour faire la même chose depuis le site de mkyoung. Vous pouvez également vérifier Maven guide pour le même

1
répondu bpjoshi 2017-02-04 18:09:03

pour une raison quelconque, dans l'application web que je donne la maintenance, ni solution D'Alireza Fattahi ni solution de JJ Roman a fonctionné correctement. Dans les deux cas, la compilation se passe bien (il voit le pot), mais l'emballage ne parvient pas à inclure le pot dans la guerre.

la seule façon dont j'ai réussi à la faire fonctionner était en mettant le bocal sur /src/main/webapp/WEB-INF/lib/ et puis en le combinant avec soit Fattahis ou Roman solution.

1
répondu Haroldo_OK 2017-09-14 17:26:03

CETTE RÉPONSE EST SEULEMENT POUR LES UTILISATEURS D'ECLIPSE:

si vous utilisez Eclipse, placez le bocal dans lib/, faites un clic droit sur le nom du bocal et cliquez sur"Ajouter pour construire le chemin". Eclipse va créer une "bibliothèque référencée" et placer le bocal pour vous

il a résolu l'importation du pot tout de suite dans le programme pour moi

0
répondu Anandkumar 2016-04-28 18:31:43

pour installer un jar tiers, veuillez appeler la commande comme ci-dessous

mvn install:install-file -DgroupId= -DartifactId= -Dversion= -Dpackaging=jar -Dfile=path
0
répondu Ravikiran Reddy Kotapati 2017-03-15 08:23:25

j'ai eu la même erreur pour un ensemble de dépendances dans mon pompon.il s'avère que les versions des dépendances n'étaient pas spécifiées dans le pom.xml et a été mentionné dans le référentiel parent. Pour une raison quelconque, les détails de la version n'étaient pas synchronisés avec ce rapport. C'est pourquoi j'ai entré manuellement les versions en utilisant la balise et ça a fonctionné comme un charme. Un peu de temps nécessaire pour rechercher les versions dans le parent et spécifier ici. Mais cela peut être fait juste pour les pots qui sont montrant l'artifactid erreur et il fonctionne. Espérons que cela aide quelqu'un.

0
répondu Ranjan Rozario 2018-02-21 09:39:01

je pense qu'une meilleure solution pour ce problème est d'utiliser maven-install-plugin pour installer automatiquement les fichiers au moment de l'installation. C'est la façon dont je l'ai installé pour mon projet.

d'abord, ajoutez le chemin (où vous stockez le local .pots) en tant que propriété.

<properties>
    <local.sdk>/path/to/jar</local.sdk>
</properties>

puis, sous plugins ajouter un plugin pour installer les bocaux lors de la compilation.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.5.2</version>
    <executions>
        <execution>
            <id>1</id>
            <phase>initialize</phase>
            <goals>
                <goal>install-file</goal>
            </goals>
            <configuration>
                <groupId>com.local.jar</groupId> 
                <artifactId>appengine-api</artifactId>
                <version>1.0</version>
                <packaging>jar</packaging>
                <file>${local.sdk}/lib/impl/appengine-api.jar</file>
            </configuration>
        </execution>
        <execution>
            <id>appengine-api-stubs</id>
            <phase>initialize</phase>
            <goals>
                <goal>install-file</goal>
            </goals>
            <configuration>
                <groupId>com.local.jar</groupId>
                <artifactId>appengine-api-stubs</artifactId>
                <version>1.0</version>
                <packaging>jar</packaging>
                <file>${local.sdk}/lib/impl/appengine-api-stubs.jar</file>
            </configuration>
        </execution>
    </executions>
</plugin>

Enfin, dans les dépendances, vous peut ajouter les pots

<dependency>
    <groupId>com.local.jar</groupId>
    <artifactId>appengine-api</artifactId>
    <version>1.0</version>
</dependency>

<dependency>
    <groupId>com.local.jar</groupId>
    <artifactId>appengine-api-stubs</artifactId>
    <version>1.0</version>
    <scope>test</scope>
</dependency>

en mettant en place votre projet comme ceci, le projet va continuer à construire même si vous le prenez à un autre ordinateur (étant donné qu'il a tous les fichiers jar dans le chemin spécifié par la propriété local.sdk ).

Pour groupId utiliser un nom unique juste pour s'assurer qu'il n'y a pas de conflits.

maintenant quand vous mvn install ou mvn test les pots locaux seront ajoutés automatiquement.

0
répondu Sudara 2018-06-10 22:24:40
  1. mvn install

vous pouvez écrire le code ci-dessous en ligne de commande ou si vous utilisez eclipse builtin maven clic droit sur project - > Run As - > run configurations... - >dans le panneau de gauche, faites un clic droit sur Maven Build - > nouvelle configuration - > écrivez le code dans Goals & in base directory: $ {project_loc:NameOfYourProject} - > Run

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 à:

< chemin-vers-fichier >: le chemin vers le fichier à charger.e.g -> c:\kaptcha-2.3.jar

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

< artifact-id >: le nom d'artefact pour le fichier E. g - > kaptcha

< version>: la version du fichier E. g - > 2.3

< emballage >: l'emballage du fichier e.g. - > jar

2.Une fois installé, il suffit de déclarer jar dans pom.XML.

 <dependency>
      <groupId>com.google.code</groupId>
      <artifactId>kaptcha</artifactId>
      <version>2.3</version>
 </dependency>
0
répondu Mazen Embaby 2018-07-31 17:13:35

Apache Maven 3.5.4, j'ai dû ajouter du double du devis. Sans guillemets, il n'a pas fonctionné pour moi.

exemple: mvn install:install-fichier "-Dfile=emplacement pour le fichier jar" "-DgroupId=id de groupe" "-DartifactId=artefact" id "-Dversion=" version "-Dpackaging=type de package"

0
répondu Kavindu Gayan 2018-09-05 10:54:22

j'ai eu le même problème avec ojdbc6. J'ai vu ce lien mais il ne marche pas. La commande était correcte mais j'avais besoin d'un paramètre de plus,

C'est le lien: http://roufid.com/3-ways-to-add-local-jar-to-maven-project /

Voici l'exemple:

install:install-file -Dfile=C:\driversDB\ojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.3 -Dpackaging=jar
-1
répondu sdarks 2018-02-21 17:57:52