Je veux que le pot soit dans une lib 3rdparty dans le contrôle de code source et que je le lie par chemin relatif depuis le fichier pom.xml.
Si vous le voulez vraiment (comprenez, si vous ne pouvez pas utiliser un référentiel d'entreprise), alors mon conseil serait d'utiliser un "référentiel de fichiers" local au projet et de ne pas utiliser une system
dépendance de portée. La system
portée doit être évitée, de telles dépendances ne fonctionnent pas bien dans de nombreuses situations (par exemple dans l'assemblage), elles causent plus de problèmes que d'avantages.
Donc, au lieu de cela, déclarez un référentiel local au projet:
<repositories>
<repository>
<id>my-local-repo</id>
<url>file://${project.basedir}/my-repo</url>
</repository>
</repositories>
Installez votre bibliothèque tierce là-dedans en utilisant install:install-file
le localRepositoryPath
paramètre:
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<myGroup> \
-DartifactId=<myArtifactId> -Dversion=<myVersion> \
-Dpackaging=<myPackaging> -DlocalRepositoryPath=<path>
Mise à jour: Il semble que l' install:install-file
ignore localRepositoryPath
lors de l'utilisation de la version 2.2 du plugin. Cependant, cela fonctionne avec la version 2.3 et ultérieure du plugin. Utilisez donc le nom complet du plugin pour spécifier la version:
mvn org.apache.maven.plugins:maven-install-plugin:2.3.1:install-file \
-Dfile=<path-to-file> -DgroupId=<myGroup> \
-DartifactId=<myArtifactId> -Dversion=<myVersion> \
-Dpackaging=<myPackaging> -DlocalRepositoryPath=<path>
documentation de maven-install-plugin
Enfin, déclarez-le comme toute autre dépendance (mais sans la system
portée):
<dependency>
<groupId>your.group.id</groupId>
<artifactId>3rdparty</artifactId>
<version>X.Y.Z</version>
</dependency>
C'est à mon humble avis une meilleure solution que d'utiliser une system
portée car votre dépendance sera traitée comme un bon citoyen (par exemple, elle sera incluse dans un assemblage, etc.).
Maintenant, je dois mentionner que la "bonne façon" de faire face à cette situation dans un environnement d'entreprise (peut-être pas le cas ici) serait d'utiliser un référentiel d'entreprise.
localRepositoryPath
...basedir/./my-local-repo
avec un seul à la.
place.Utilisation de la
system
portée.${basedir}
est le répertoire de votre pom.Cependant, il est conseillé d'installer votre bocal dans le référentiel et de ne pas le valider dans le SCM - après tout, c'est ce que maven essaie d'éliminer.
la source
Ceci est une autre méthode en plus de ma réponse précédente sur Puis-je ajouter des fichiers jars à maven 2 build classpath sans les installer?
Cela contournera la limite lors de l'utilisation de versions multi-modules, en particulier si le fichier JAR téléchargé est référencé dans des projets enfants en dehors du parent. Cela réduit également le travail d'installation en créant les fichiers POM et SHA1 dans le cadre de la génération. Il permet également au fichier de résider n'importe où dans le projet sans fixer les noms ou suivre la structure du référentiel maven.
Cela utilise le plugin maven-install-plugin. Pour que cela fonctionne, vous devez configurer un projet multi-modules et avoir un nouveau projet représentant la génération pour installer les fichiers dans le référentiel local et vous assurer qu'il est le premier.
Votre projet multi-module pom.xml ressemblerait à ceci:
Le fichier repository / pom.xml contiendra alors les définitions pour charger les fichiers JAR qui font partie de votre projet. Voici quelques extraits du fichier pom.xml.
L'emballage pom empêche cela de faire des tests ou de compiler ou de générer un fichier jar. La viande du pom.xml se trouve dans la section de construction où le plugin maven-install est utilisé.
Pour installer plusieurs fichiers, ajoutez simplement plus d'exécutions.
la source
Cela fonctionne pour moi: disons que j'ai cette dépendance
Ensuite, ajoutez manuellement le chemin de classe pour votre dépendance système comme ceci
Configuration complète:
la source
J'ai déjà écrit sur un modèle pour ce faire.
Elle est très similaire à la solution proposée par Pascal, bien qu'elle déplace toutes ces dépendances dans un module de référentiel dédié afin que vous n'ayez pas à la répéter partout où la dépendance est utilisée s'il s'agit d'une construction multi-modules.
la source
Fondamentalement, ajoutez ceci au pom.xml:
la source
nous sommes passés à gradle et cela fonctionne beaucoup mieux à gradle;). nous spécifions simplement un dossier dans lequel nous pouvons déposer des pots pour des situations temporaires comme celle-ci. Nous avons encore la plupart de nos pots définis dans la section de gestion des dépendances typiques (c'est-à-dire les mêmes que maven). C'est juste une dépendance de plus que nous définissons.
Donc, fondamentalement, maintenant, nous pouvons simplement déposer n'importe quel pot que nous voulons dans notre répertoire lib pour un test temporaire s'il n'est pas quelque part dans un référentiel in maven.
la source
Un petit ajout à la solution proposée par Pascal
Lorsque j'ai suivi cette route, j'ai eu une erreur dans maven lors de l'installation du pot ojdbc.
Après avoir ajouté -DpomFile, le problème a été résolu.
la source
Vous pouvez utiliser eclipse pour générer un fichier exécutable: fichier d'exportation / fichier exécutable
la source