Maven – Dépend du zip assemblé

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.

Projet Zip:

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

  1. c’est une archive zip
  2. le “classificateur” est des ressources (comme le nom de l’assembly)

    ressources zip false src / main / resources

Projet principal:

pom.xml

S’il vous plaît, notez que

  1. cela dépend d’une archive zip
  2. 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.