J’essaie d’avoir un projet B déroulant (et décompactant) un fichier ZIP créé par le projet A et déployé sur un référentiel distant.
Le ZIP est créé et associé à l’aide du maven-assembly-plugin
, avec le type d’emballage pom
:
project-a ZIP Used by Project B pom ... org.apache.maven.plugins maven-assembly-plugin dissortingbution-package package single src/main/assembly/scripts.xml gnu
Tenter de le retirer du pom du projet B avec le maven-dependency-plugin
:
org.apache.maven.plugins maven-dependency-plugin copy-scripts package copy ${basedir}/target/staging true ... ... ... true zip
échoue avec: [ERROR] Failed to execute goal on project ...: Could not resolve dependencies for project group:artifact:pom:version: Could not find artifact group:project-a:zip:version in nexus (http://...:8081/nexus/content/groups/public) -> [Help 1]
Je suppose que cela est dû au fait que j’ai spécifié le packaging du projet A comme étant pom
et non zip
, mais je ne peux pas spécifier le projet A comme type de zip
car il en résulte:
[ERROR] Unknown packaging: zip @ line 13, column 13
Est-ce que je fais quelque chose de mal ici ou est-ce simplement impossible? J’ai juste un tas de fichiers que je veux regrouper dans un artefact et permettre à plusieurs autres projets de les télécharger et de les décompresser pour les utiliser. Ouvert à différentes suggestions …
J’ai également vérifié pour s’assurer que le zip assemblé est bien dans le nexus.
MISE À JOUR AVEC RÉPONSE
Pour le bénéfice de quiconque, ce qui me manquait, c’est que le de la dépendance doit correspondre à l’
de l’assembly. Notez que
thisistheattachedartifactsclassifier
est spécifié dans les fichiers suivants.
scripts.xml (projet A):
thisistheattachedartifactsclassifier zip src/main/resources ...
pom.xml (Projet B):
org.apache.maven.plugins maven-dependency-plugin copy-scripts package copy ${basedir}/target/staging true ... ... ... thisistheattachedartifactsclassifier true zip
Bienvenue dans Stack Overflow :).
Tu es sur le bon chemin. Votre vrai problème est d’utiliser un zip.
La configuration suivante est correcte et fonctionne très bien pour moi. C’est un ancien (il y a deux ans) et je ne suis pas sûr que cela corresponde aux meilleures pratiques. Mais je sais que ça marche.
Cela me permet de partager certaines ressources entre les projets, en particulier pour les tests unitaires.
pom.xml
com.mycompany cfg_dev 1.1.0 org.apache.maven.plugins maven-assembly-plugin cfg-main-resources single package /src/main/assembly/resources.xml
Descripteur d’assemblage: il produira cet artefact: cfg_dev-1.1.0-resources.zip Veuillez noter que
le “classificateur” est des ressources (comme le nom de l’assembly)
ressources zip false src / main / resources
pom.xml
S’il vous plaît, notez que
la dépendance “classificateur” est des ressources (comme le nom de l’assembly précédent)
com.mycompany cfg_dev ${project.version} resources zip test .... src/test/resources true ${project.build.directory}/test-resources true org.apache.maven.plugins maven-dependency-plugin unpack-cfg-test-resources unpack-dependencies generate-test-resources ${project.build.directory}/test-resources cfg_dev ${project.groupId} true pom test
J’espère que c’est clair et que cela vous aidera 🙂
Une autre approche pourrait consister à renoncer entièrement à la compression, à utiliser le cycle de vie standard de Maven pour regrouper vos fichiers en tant que ressources dans un fichier jar et y accéder depuis vos autres projets via classpath.
Sauf si vous avez des exigences de conditionnement spécifiques (incluant, excluant, etc.), cela ne nécessiterait aucune configuration supplémentaire: placez simplement vos fichiers dans le répertoire src/main/resources
votre projet.
Cette approche présente l’avantage supplémentaire de fonctionner sans modification lorsqu’elle est appelée depuis un IDE tel qu’Eclipse.
Si vous voulez faire quelque chose comme ça depuis la ligne de commande (par exemple depuis un script sans avoir à écrire un fichier pom.xml
), voici comment le faire …
Vous pouvez soit spécifier les propriétés individuelles:
mvn dependency:copy -DgroupId=org.apache.maven -DartifactId=maven-core -Dversion=2.2.1 -Dpackaging=zip -Dclassifier=thisistheattachedartifactsclassifier
Ou spécifiez-les toutes dans un paramètre d’ artifact
:
mvn dependency:copy -Dartifact=org.apache.maven:maven-core:2.2.1:zip:thisistheattachedartifactsclassifier
Avec ce dernier, il est important de garder le classifier
à la fin, après l’atsortingbut packaging/type
. Comme ceci: -Dartifact=groupId:artifactId:version:type:classifier
Vous pouvez également éventuellement spécifier le répertoire cible à l’aide du -DoutputDirectory=
si nécessaire.