Maven: dipende dalla zip assemblata

Sto provando a fare in modo che un progetto B scorra (e decomprimi) un ZIP creato dal progetto A e distribuito su un repository remoto.

Lo ZIP è creato e allegato utilizzando il maven-assembly-plugin con, con il tipo di imballaggio pom :

 project-a ZIP Used by Project B pom ...  org.apache.maven.plugins maven-assembly-plugin   distribution-package package  single    src/main/assembly/scripts.xml  gnu     

Tentativo di estrarlo dal progetto B con il maven-dependency-plugin :

  org.apache.maven.plugins maven-dependency-plugin   copy-scripts package  copy   ${basedir}/target/staging true   ... ... ... true zip       

fallisce con: [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]

Suppongo che ciò sia dovuto al fatto che ho specificato la confezione di Project A come pom e not zip , tuttavia non posso specificare Project A come tipo di zip perché risulta in:

 [ERROR] Unknown packaging: zip @ line 13, column 13 

Sto facendo qualcosa di sbagliato qui o semplicemente non è ansible? Ho solo un sacco di file che voglio raggruppare in un artefatto e consentire a più altri progetti di scaricarli e decomprimerli per l’uso. Aperto a diversi suggerimenti …

Ho anche controllato per accertarmi che lo zip assemblato sia effettivamente nel nexus.

AGGIORNATO CON RISPOSTA

Per il beneficio di qualcun altro, quello che mi mancava è che il della dipendenza deve corrispondere al dell’assembly. Si noti dove viene specificato thisistheattachedartifactsclassifier nei seguenti file.

scripts.xml (Progetto A):

  thisistheattachedartifactsclassifier  zip    src/main/resources ...    

pom.xml (Progetto B):

  org.apache.maven.plugins maven-dependency-plugin   copy-scripts package  copy   ${basedir}/target/staging true   ... ... ... thisistheattachedartifactsclassifier true zip       

Benvenuto in Stack Overflow :).

Sei sulla buona strada. Il tuo vero problema è usare un zip.

La seguente configurazione è ok e funziona benissimo per me. È vecchio (2 anni fa) e non sono sicuro che corrisponda alle migliori pratiche. Ma so che sta funzionando.

Questo mi consente di condividere alcune risorse tra i progetti, in particolare per i test unitari.

Progetto 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        

Descrittore dell’Assemblea : Produrrà questo artefatto: cfg_dev-1.1.0-resources.zip Si prega di notare che

  1. questo è un archivio zip
  2. il “classificatore” è risorse (come il nome dell’assembly)

    risorse zip false src / main / resources

Progetto principale:

pom.xml

Per favore, nota quello

  1. questo dipende da un archivio zip
  2. il “classificatore” di dipendenza è risorse (come il nome dell’assembly precedente)

       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      

Spero sia chiaro e questo ti aiuterà 🙂

Un approccio alternativo potrebbe essere quello di rinunciare interamente allo zippamento, utilizzare il ciclo di vita standard di Maven per impacchettare i file come risorse in un file jar e accedervi dagli altri progetti tramite classpath.

A meno che non si abbiano requisiti di imballaggio specifici (inclusi, esclusi, ecc.) Ciò non richiederebbe alcuna configurazione aggiuntiva: basta mettere i propri contenuti nella directory src/main/resources .

Questo approccio ha l’ulteriore vantaggio di funzionare invariato quando viene richiamato da un IDE come Eclipse.

Se vuoi fare qualcosa di simile dalla riga di comando (ad esempio da uno script senza dover scrivere un file pom.xml ), ecco il modo per farlo …

Puoi specificare le singole proprietà:

 mvn dependency:copy -DgroupId=org.apache.maven -DartifactId=maven-core -Dversion=2.2.1 -Dpackaging=zip -Dclassifier=thisistheattachedartifactsclassifier 

O specificateli tutti in un parametro artifact :

 mvn dependency:copy -Dartifact=org.apache.maven:maven-core:2.2.1:zip:thisistheattachedartifactsclassifier 

Con quest’ultimo, è importante mantenere il classifier alla fine, dopo l’attributo packaging/type . In questo modo: -Dartifact=groupId:artifactId:version:type:classifier

È anche ansible specificare opzionalmente la directory di destinazione utilizzando il -DoutputDirectory= se necessario.