construire un projet maven avec des bibliothèques de propriété inclus [dupliquer]
cette question a déjà une réponse ici:
- comment ajouter des fichiers jar locaux à un projet Maven? 27 Réponses
comment créer maven pom, ce qui rendra le projet buildable, puis-je inclure des pots de propriatery avec mon projet directement sans avoir à les prendre à partir du dépôt? quiconque fait cela avant ?
EDIT:
Je ne veux pas le faire fonctionner en construisant l'assemblage avec des dépendances jar, je veux qu'il soit buildable. Donc, quiconque ayant ce projet est capable de le construire, même si les pots ne sont pas trouvés dans un dépôt.
11 réponses
1 soit vous pouvez inclure ce pot dans votre chemin de classe d'application
2 vous pouvez installer le fichier jar particulier dans votre Maven reopos par
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
-DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>
solutions possibles est de mettre vos dépendances dans src / main / resources puis dans votre pom:
<dependency>
groupId ...
artifactId ...
version ...
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/yourJar.jar</systemPath>
</dependency>
Note: les dépendances du système ne sont pas copiées dans le résultat jar / war
(voir comment inclure les dépendances de système dans la guerre construit en utilisant maven )
créez un dossier de dépôt dans le cadre de votre projet. Prenons
${project.basedir}/src/main/resources/repo
ensuite, installez votre jar personnalisé à ce rapport:
mvn install:install-file -Dfile=[FILE_PATH] \
-DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] \
-Dpackaging=jar -DlocalRepositoryPath=[REPO_DIR]
enfin, ajouter les définitions suivantes de rapport et de dépendance aux projets pom.xml:
<repositories>
<repository>
<id>project-repo</id>
<url>file://${project.basedir}/src/main/resources/repo</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>[GROUP]</groupId>
<artifactId>[ARTIFACT]</artifactId>
<version>[VERS]</version>
</dependency>
</dependencies>
pourquoi ne pas lancer quelque chose comme Nexus , votre propre Maven repo que vous pouvez télécharger des fichiers JAR propriétaires tiers, et aussi proxy d'autres dépôts publics, pour enregistrer sur bandwith?
ce a également de bonnes raisons d'exécuter votre propre gestionnaire de dépôt maven.
vous pouvez l'obtenir de votre chauffeur local comme ci-dessous:
<dependency>
<groupId>sample</groupId>
<artifactId>com.sample</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/yourJar.jar</systemPath>
</dependency>
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>
un bon moyen d'y parvenir est d'avoir un serveur miroir Maven tel que Nexus Type son . Il est gratuit et très facile à configurer (Java Web app). Avec Nexus, il est possible d'avoir un dépôt privé (d'équipe, d'entreprise, etc.) avec la possibilité de déployer des applications externes et internes, tout en enregistrant d'autres dépôts Maven comme faisant partie du même serveur. De cette façon, les paramètres Maven locaux se référeraient seulement au serveur Nexus privé et toutes les dépendances seront être résolu en l'utilisant.
vous pouvez soit ajouter le jar à votre projet et jouer avec le maven-assembly-plugin, soit ajouter le jar à votre dépôt local:
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging> -DgeneratePom=true
Where: <path-to-file> the path to the file to load
<group-id> the group that the file should be registered under
<artifact-id> the artifact name for the file
<version> the version of the file
<packaging> the packaging of the file e.g. jar
je pense que la "bonne" solution est d'ajouter vos propres bibliothèques de votre propre référentiel. Cela devrait être simple: créer des pom pour votre projet de bibliothèque et publier la version compilée sur votre dépôt. Ajoutez ce dépôt à la liste des dépôts pour votre projet de messagerie et exécutez build. Je crois qu'il va travailler pour vous.
vous pouvez utiliser le Maven-assembly-plugin et créer un bocal avec toutes les dépendances incluses.
créez un nouveau dossier, disons local-maven-repo
à la racine de votre projet Maven.
il suffit d'ajouter un rapport local à 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]
(copie de ma réponse à une question similaire )