2010-09-14 19 views
5

Ho un progetto maven gerarchico, dal quale sto cercando di creare un programma di installazione nativo per diversi sottomoduli. Sto usando il mio nome prodotto come prefisso: <finalName>xyz-${artifactId}</finalName> nel POM padre in modo che tutti i miei oggetti artefatti abbiano una convenzione di denominazione standard.L'assembly Maven ignora finalName per gli artefatti dipendenti

xyz-parent 
+-- util 
     +--- target/xyz-util.jar 
+-- core 
     +--- target/xyz-core.jar 
+-- app1 <--- "builds an installer as part of the package phase" 
     +--- target/xyz-app1.jar 
+-- app2 <--- "builds an installer as part of the package phase" 
     ... 

Ho bisogno di materializzare tutti i barattoli dipendenti in una directory (in quanto inno setup non sa nulla di Maven). Quindi, per ogni modulo, che è un programma di installazione ho intenzione di usare Maven-assemblaggio-plugin, quindi usare qualcosa di simile a quanto segue nel mio Inno Setup:

Source: "target\pkg\lib\*.jar"; DestDir: "{app}\external"; Flags: ignoreversion; 

Quando eseguo mvn clean package, ottengo una directory target/xyz-app1-bin/xyz-app1/lib con tutte le vasetti dipendenti, ma nessuno dei vasi prodotti dai miei progetti fratelli hanno i loro nomi finali corretti (ad esempio, ho util-0.0.1-SNAPSHOT.jar invece di xyz-util.jar)

Questo problema sembra simile a this post, ma non ho idea di che cosa "allegare" è (forse deprecato).

risposta

3

sono stato in grado di utilizzare direttamente NomeFinale, però, sono riuscito a re-implementare la logica NomeFinale volevo utilizzando set con le dipendenze - partizionamento in tal modo le mie dipendenze in un set esterno ed interno (basato sul groupId):

<assembly> 
    <id>bin</id> 
    <formats> 
    <format>dir</format> 
    </formats> 
    <dependencySets> 
    <dependencySet> 
     <outputDirectory>external</outputDirectory> 
     <outputFileNameMapping> 
     ${artifact.artifactId}.${artifact.extension} 
     </outputFileNameMapping> 
     <excludes> 
     <exclude>com.xyz:*</exclude> 
     </excludes> 
    </dependencySet> 

    <dependencySet> 
     <outputDirectory>lib</outputDirectory> 
     <outputFileNameMapping> 
     xyz-${artifact.artifactId}.${artifact.extension} 
     </outputFileNameMapping> 
     <includes> 
     <include>com.xyz:*</include> 
     </includes> 
    </dependencySet> 

    </dependencySets> 
</assembly> 
1

Si dovrebbe essere in grado di utilizzare NomeFinale utilizzare direttamente (questo ha funzionato per me):

<outputFileNameMapping> 
    ${artifact.build.finalName}.${artifact.extension} 
</outputFileNameMapping> 
Problemi correlati