J’utilise le plugin maven-assembly pour créer un fichier jar de mon application, y compris ses dépendances comme suit:
macosx tar.gz dir *:jar lib
(J’ai omis d’autres choses qui ne sont pas liées à la question)
Jusqu’à présent, cela a bien fonctionné car il crée un répertoire lib
avec toutes les dépendances. Cependant, j’ai récemment ajouté une nouvelle dépendance dont la scope est le system
, et elle ne la copie pas dans le répertoire de sortie de la lib
. Je dois manquer quelque chose de fondamental ici, alors je demande de l’aide.
La dépendance que je viens d’append est la suivante:
sourceforge.jchart2d jchart2d 3.1.0 system ${project.basedir}/external/jchart2d-3.1.0.jar
La seule façon d’inclure cette dépendance était d’append l’élément suivant à l’élément assembly:
external/jchart2d-3.1.0.jar lib
Cependant, cela me force à changer le fichier pom et l’assembly chaque fois que ce fichier est renommé, si jamais. En outre, il semble juste faux.
J’ai essayé avec runtime
dans les ensembles de dependencySets
et sourceforge.jchart2d:jchart2d
sans succès.
Alors, comment est-ce que vous incluez un pot de scope system
dans votre fichier d’assemblage dans maven 2?
Merci beaucoup
Je ne suis pas surpris que les dépendances de la scope du système ne soient pas ajoutées (après tout, les dépendances avec une scope du système doivent être explicitement fournies par définition). En fait, si vous ne voulez vraiment pas placer cette dépendance dans votre référentiel local (par exemple parce que vous souhaitez le dissortingbuer dans le cadre de votre projet), voici ce que je ferais:
Je déclarerais ce repository dans mon pom.xml
comme ceci:
my file://${basedir}/my-repo
Je voudrais simplement déclarer l’artefact sans l’étendue du system
, c’est juste une source de problèmes:
sourceforge.jchart2d jchart2d 3.1.0
Je ne suis pas sûr à 100% que cela conviendra à vos besoins, mais je pense que c’est une meilleure solution que d’utiliser l’étendue du système.
Mise à jour: J’aurais dû le mentionner dans ma réponse originale et je le répare maintenant. Pour installer une bibliothèque tierce dans le référentiel basé sur des fichiers, utilisez install:install-file
avec le paramètre localRepositoryPath
:
mvn install:install-file -Dfile= \ -DgroupId= \ -DartifactId= \ -Dversion= \ -Dpackaging= \ -DlocalRepositoryPath=
Vous pouvez le coller tel quel dans un shell * nix. Sur Windows, supprimez le ” \
” et mettez tout sur une seule ligne.
Btw vous pouvez l’automatiser et en faire une partie de votre build Maven. Ce qui suit va installer votre jar dans votre repository local avant la compilation:
org.apache.maven.plugins maven-install-plugin hack-binary validate ${basedir}/lib/your-lib.jar default your-group your-artifact 0.1 jar true install-file
Je trouve une solution facile au cas où tu créerais un pot
org.apache.maven.plugins maven-war-plugin 2.1.1 dependencies/mydep WEB-INF/lib true **/*.jar
Vous pouvez également gérer cela en ajoutant un dependencySet supplémentaire dans vos ensembles de dépendances.
system *:jar lib
La meilleure chose serait d’utiliser un gestionnaire de référentiel (comme Nexus, Artifactory, Archiva) et d’installer ce type de dépendance dans un référentiel particulier. Après cela, vous pouvez utiliser des choses comme une dépendance simple. Cela vous simplifiera la vie.
Docs: https://maven.apache.org/plugins/maven-assembly-plugin/assembly.html
Une solution simple consiste à l’append au repository local maven.
Une des façons de le faire est d’utiliser les commandes mvn install, comme suggéré dans le post précédent.
Un autre moyen facile est 1) Dans votre eclipse ide, cliquez avec le bouton droit sur le projet, sélectionnez l’option Maven. 2) Sélectionnez Installer ou déployer un artefact dans une option de référentiel Maven et cliquez sur Suivant. 3) Cliquez sur Parcourir à côté de la case à cocher Fichier d’artefacts et sélectionnez votre fichier jar 4) Entrez GroupId et ArtifactId et assurez-vous que la version génère pom et crée la sum de contrôle est cochée
Cliquez sur Terminer, Wallah !!! votre travail est terminé le jar est ajouté dans votre référentiel local que vous pouvez définir dans le répertoire setting.xml ou m2
Maintenant, ajoutez simplement la dépendance maven simple selon la version de GroupId, ArtifactId & jar que vous avez entrée comme pour l’importation et c’est votre jar externe qui sera empaqueté par maven.
Édité: Désolé que je n’ai pas réalisé qu’alx a également mentionné le contournement du cycle de vie propre.
org.apache.maven.plugins maven-install-plugin hack-binary clean ${basedir}/lib/your-lib.jar default your-group your-artifact 0.1 jar true install-file
Basé sur la solution fournie par alx, vous pouvez exécuter l’étape d’installation du fichier à la phase de nettoyage. mais comme la phase de nettoyage n’est pas dans le cycle de vie par défaut, vous devez exécuter mvn clean
pour la première fois pour vous assurer que le mvn clean
jar est prêt dans le référentiel local.
ex: mvn clean; paquet mvn
cela a fonctionné plus facilement sur ma solution:
retirer de votre dépendance:
tiago.medici eureka 0.0.1
Ensuite, ajoutez également le plug-in maven-install dans le fichier pom.xml.
org.apache.maven.plugins maven-install-plugin install-external clean ${basedir}/external/tiago.medici-0.0.1.jar default tiago.medici eureka 0.0.1 jar true install-file