Comment créer maven pom, qui rendra le projet constructible, puis-je inclure des pots de propriété avec mon projet directement sans avoir à les retirer du référentiel? quelqu'un a fait ça avant?
MODIFIER :
Je ne veux pas le rendre exécutable en construisant Assembly avec un pot de dépendances, je veux qu'il soit constructible. Ainsi, toute personne ayant ce projet est en mesure de le construire, même si des bocaux ne se trouvent nulle part dans aucun référentiel.
1 Soit vous pouvez inclure ce pot dans votre chemin de classe d'application
2 vous pouvez installer un fichier jar particulier dans vos réopos maven en
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
-DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>
Les solutions possibles sont 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>
Remarque: les dépendances du système ne sont pas copiées dans le pot/la guerre résultant
(voir Comment inclure les dépendances système dans war construit en utilisant maven )
Créez un dossier de référentiel sous votre projet. Prenons
${project.basedir}/src/main/resources/repo
Ensuite, installez votre pot personnalisé sur ce dépôt:
mvn install:install-file -Dfile=[FILE_PATH] \
-DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] \
-Dpackaging=jar -DlocalRepositoryPath=[REPO_DIR]
Enfin, ajoutez les définitions de référentiel et de dépendance suivantes 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 exécuter quelque chose comme Nexus , votre propre dépôt Maven que vous pouvez télécharger des fichiers jar propriétaires tiers, et également proxy d'autres référentiels publics, pour économiser sur la bande passante?
This a également de bonnes raisons d'exécuter votre propre gestionnaire de référentiel maven.
Vous pouvez l'obtenir auprès de votre pilote 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>
Le moyen vraiment rapide et sale est de pointer vers un fichier local:
<dependency>
<groupId>sampleGroupId</groupId>
<artifactId>sampleArtifactId</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>C:\DEV\myfunnylib\yourJar.jar</systemPath>
</dependency>
Cependant, cela ne vivra que sur votre machine (évidemment), car le partage a généralement du sens d'utiliser une archive m2 appropriée (nexus/artifactory) ou si vous n'en avez pas ou si vous ne voulez pas en créer un de maven local archive structurée et configurez un "référentiel" dans votre pom: local:
<repositories>
<repository>
<id>my-local-repo</id>
<url>file://C:/DEV//mymvnrepo</url>
</repository>
</repositories>
éloigné:
<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 Sonatype Nexus . Il est gratuit et très facile à configurer (application web Java). Avec Nexus, on peut avoir un référentiel privé (équipe, entreprise, etc.) avec une capacité de déployer des applications tierces et internes, tout en enregistrant d'autres référentiels Maven comme faisant partie du même serveur. De cette façon, les paramètres Maven locaux référenceraient uniquement le seul serveur Nexus privé et toutes les dépendances seront résolues en l'utilisant.
Créez un nouveau dossier, disons local-maven-repo
à la racine de votre projet Maven.
Ajoutez simplement un dépôt 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 pot externe que vous souhaitez 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]
(Copié de ma réponse sur une question similaire )
Vous pouvez utiliser le maven-Assembly-plugin et créer un pot avec toutes les dépendances incluses.
Vous pouvez soit ajouter le pot à votre projet et jouer avec le plugin maven-Assembly, soit ajouter le pot à 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 ici est d'ajouter vos bibliothèques propriétaires à votre propre référentiel. Cela devrait être simple: créez pom pour votre projet de bibliothèque et publiez la version compilée sur votre référentiel. Ajoutez ce référentiel à la liste des référentiels pour votre projet de messagerie et exécutez la génération. Je crois que cela fonctionnera pour vous.