Maven 2 assemblée avec des dépendances: pot en vertu de portée “système” de ne pas inclus
Je suis en utilisant maven-assembly plugin pour créer un jar de mon application, y compris ses dépendances comme suit:
<assembly>
<id>macosx</id>
<formats>
<format>tar.gz</format>
<format>dir</format>
</formats>
<dependencySets>
<dependencySet>
<includes>
<include>*:jar</include>
</includes>
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets>
</assembly>
(J'ai omis quelques autres trucs qui n'est pas liée à la question)
Jusqu'à présent cela a bien fonctionné parce qu'il crée une lib
répertoire avec toutes les dépendances. Cependant, j'ai récemment ajouté une nouvelle dépendance dont la portée est system
, et il ne copie pas le lib
répertoire de sortie. quelque chose doit m'échapper de base ici, j'ai donc appeler à l'aide.
La dépendance que j'ai juste ajouté est:
<dependency>
<groupId>sourceforge.jchart2d</groupId>
<artifactId>jchart2d</artifactId>
<version>3.1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/external/jchart2d-3.1.0.jar</systemPath>
</dependency>
La seule façon que j'ai été en mesure d'inclure cette dépendance a été par adjonction de l'élément d'assemblage:
<files>
<file>
<source>external/jchart2d-3.1.0.jar</source>
<outputDirectory>lib</outputDirectory>
</file>
</files>
Cependant, ce qui m'oblige à changer de pom et de l'assemblée fichier à chaque fois que ce pot est renommé, si jamais. Aussi, il semble tout simplement faux.
J'ai essayé avec <scope>runtime</scope>
dans le dependencySets
et <include>sourceforge.jchart2d:jchart2d</include>
avec pas de chance.
Alors, comment avez-vous inclure un system
étendue de pot de votre fichier d'assembly dans maven 2?
Merci beaucoup
- Le champ "runtime" n'aurait pas changé le résultat, parce que c'est la valeur par défaut.
- J'ai juste poussé jchart2d à Maven Central! sourceforge.net/news/?group_id=50440 - profitez-en!
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas surpris que le système de la portée des dépendances ne sont pas ajoutés (après tout, dépendances avec un système de portée doit être expressément prévu par définition). En fait, si vous ne voulez vraiment pas mettre que de la dépendance dans votre référentiel local (par exemple parce que vous souhaitez le distribuer dans le cadre de votre projet), c'est ce que je ferais:
Je voudrais déclarer que le référentiel dans mon
pom.xml
comme ceci:Je vient de déclarer l'artefact sans
system
portée, c'est juste une source de problèmes:Je ne suis pas 100% sûr que cela va répondre à vos besoins, mais je pense que c'est une meilleure solution que d'utiliser le système de portée.
Mise à jour: je devrais avoir mentionné que, dans l'original de mes réponse et je suis de fixation maintenant. Pour installer une troisième partie de la bibliothèque dans le fichier de la base de référentiel, l'utilisation
install:install-file
avec lelocalRepositoryPath
paramètre:Vous pouvez coller ce qu'est un *nix shell. Sur windows, supprimez le "
\
" et de tout mettre sur une seule ligne.~/.m2/repository
) avecinstall:install-file
et puis déplacé le répertoire de l'arborescence de${basedir}/my-repo
. Je venais de supprimer des trucs de${basedir}/my-repo
dans votre cas.Btw, vous pouvez l'automatiser et de rendre une partie de votre maven build. Suivantes vous permettront d'installer votre pot dans votre référentiel local avant la compilation:
validate
phase (qui précèdecompile
, etc...). Ainsi, une fois l'objet sera installé, il re-installer, mais il ne sera pas faire une installation initiale - c'est un poulet/oeuf problème. Un pourrait lier cela à laclean
phase (car qui ne nécessite pas la résolution des dépendances en premier) et de dire aux développeurs de la première exécution demvn clean
, mais alors elle ne travaille plus à l'aide de "procédures standard" hors de la boîte.initialize
fonctionne pour moi. Mon IDE se plaint de la non résolus de la dépendance, mais quand je le lance, le fichier JAR est installé à chaque fois et ensuite réglé l'amende juste. Une brillante solution @alx !J'ai trouver la solution facile dans le cas où vous la création de jar
Vous pouvez également gérer cela via l'ajout d'un supplément à la dependencySet dans votre dependencySets.
La meilleure chose serait d'utiliser un Gestionnaire de Dépôt (comme le Nexus, Artifactory, Archiva) et de l'installation de ce type de dépendance dans un référentiel spécifique. Après cela, vous pouvez utiliser de telles choses comme une simple dépendance. Ceci permettra de simplifier votre vie.
Docs: https://maven.apache.org/plugins/maven-assembly-plugin/assembly.html
Édité: Désolé que je ne savais pas alx également mentionné sur le propre cycle de vie solution de contournement.
De Base sur la solution fournie par alx, vous pouvez exécuter le fichier d'installation étape à nettoyer phase. mais puisque le propre de la phase n'est pas par défaut dans le cycle de vie, vous devez exécuter
mvn clean
à la première fois pour vous assurer le pot est prêt dans le local des pensions.ex: mvn clean; mvn package
Une solution simple pour cela est de l'ajouter dans le référentiel maven local
Une façon de le faire est par l'intermédiaire de mvn install comme suggéré dans le post précédent .
Un autre moyen facile est ,
1) Dans votre ide eclipse clic droit sur la sélection du projet Maven option .
2) Sélectionnez Installer ou de déployer un objet dans un référentiel option et cliquez sur suivant.
3)Cliquez sur parcourir en regard de l'Artefact case fichier & sélectionnez votre fichier jar
4)Entrez le GroupId et ArtifactId et la version s'assurer de générer des pom & créer de la somme de contrôle sont vérifiés & emballage est jar
Cliquez sur terminer ,Wallah !!! votre travail est terminé, le pot est ajouté dans votre référentiel local que vous pouvez définir dans setting.xml ou m2 répertoire
Maintenant, il suffit d'ajouter le simple maven de la dépendance par le GroupId,ArtifactId & jar version que vous avez saisi que par l'importation et externe pot va être emballé par maven.
il a travaillé dans un moyen plus facile sur ma solution :
supprimer à partir de votre dépendance :
Puis ajouter le maven-install-plugin dans le pom.xml ainsi.