2009-08-25 19 views
15

Uso il plug-in di assembly per creare diversi jar con alcune classi al suo interno. Ho bisogno di nomi personalizzati per i vasetti liberati: app_business.jarapp_gui.jarcore.jar eccMaven-assembly-plugin: nomi di file jar personalizzati

Attualmente devo seguente configurazione:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
     <appendAssemblyId>false</appendAssemblyId> 
    <finalName>app_business</finalName> 
     <descriptors> 
      <descriptor>assembly.xml</descriptor> 
     </descriptors> 
     <attach>true</attach> 
    </configuration> 
    <executions> 
     <execution> 
      <id>make-assembly</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

un file l'assembly.xml :

<assembly> 
     <id>app_business</id> 
     <formats> 
     <format>jar</format> 
     </formats> 
     <baseDirectory>target</baseDirectory> 
     <includeBaseDirectory>false</includeBaseDirectory> 

     <fileSets> 
     <fileSet> 
      <directory>${project.build.outputDirectory}</directory> 
      <outputDirectory></outputDirectory> 
      <includes> 
      <include>org/xyz/**</include> 
      </includes> 
     </fileSet>  
     </fileSets> 
    </assembly> 

questo crea un file app_business.jar che è perfetto . Ma non ho idea di come creare i miei altri file. L'opzione appendAssemblyId non mi aiuta, in quanto crea nomi di file nel formato AppName-app_business.jar. Ho davvero bisogno del nome file esatto app_business.jar.

Qualche idea? Grazie mille!

risposta

-1

I plug-in standard Maven sono pensati per lavori generici e ripetitivi. Raccolgono tutte le informazioni dal POM e sono intelligenti (nel senso che non è necessario configurare molto).

Se sono necessarie attività speciali, suggerisco di utilizzare lo ant plugin che consente di incorporare un pezzo di codice Ant nel POM. Ciò consente di eseguire il jar task.

+0

Non mi piace combinare attività di formica e di test. Ad ogni modo, l'uso delle attività ant ha bisogno di molto meno configurazione xml. (circa 20 linee per il mio lavoro) – Synox

+3

@Synox, non dovresti evitare il plug-in di antrun, è molto utile riempire gli spazi di Maven senza dover stampare il tuo plugin. Tendo solo a scoprire che le persone sono un tocco troppo acuto per usarlo quando ci sono più modi Mavenici ("qualsiasi cosa, l'equivalente Maven di Pythonic) per farlo. In questo caso, ritengo che il plug-in di assembly * dovrebbe * essere più adatto, ma come potete vedere dalla mia risposta, sembra che ci siano ancora alcuni problemi che impediscono il funzionamento esattamente come l'OP desidera. –

+0

È facile eseguire il rollover del plugin maven usando ant. –

38

È possibile spostare l'elemento di configurazione sotto l'elemento di esecuzione della dichiarazione del plugin. Ciò significa che la configurazione verrà applicata solo a tale esecuzione. È quindi possibile aggiungere ulteriori esecuzioni del plug-in di assembly per gli altri assiemi.

Ecco un esempio della configurazione modificata con due esecuzioni, ogni riferimento a una diversa montaggio:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <executions> 
    <execution> 
     <id>make-business-assembly</id> 
     <phase>package</phase> 
     <goals> 
     <goal>single</goal> 
     </goals> 
     <configuration> 
     <appendAssemblyId>false</appendAssemblyId> 
     <finalName>app_business</finalName> 
     <descriptors> 
      <descriptor>src/main/assembly/business-assembly.xml</descriptor> 
     </descriptors> 
     <attach>true</attach> 
     </configuration> 
    </execution> 
    <execution> 
     <id>make-gui-assembly</id> 
     <phase>package</phase> 
     <goals> 
     <goal>single</goal> 
     </goals> 
     <configuration> 
     <appendAssemblyId>false</appendAssemblyId> 
     <finalName>app_gui</finalName> 
     <descriptors> 
      <descriptor>src/main/assembly/gui-assembly.xml</descriptor> 
     </descriptors> 
     <attach>true</attach> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

Con questa configurazione, due vasi aggiuntivi (app _business.jar e app _gui.jar) saranno creati nella directory di destinazione, benché sappiate che installando il progetto, verrà installato solo l'ultimo artefatto assemblato (questo potrebbe naturalmente essere un problema).

Per evitare ciò, è necessario modificare le proprietà appendAssemblyId su true. La cosa più vicina che puoi ottenere in questo caso è cambiare i nomi finali in "app" e gli ID in "gui" e "business", con conseguente app-gui.jar e app-business.jar in fase di pacchettizzazione e installazione di tutti gli artefatti.

+0

Hey, grazie per la risposta molto veloce! funziona.come hai detto ci sono avvertimenti sulla console e l'ultimo artefatto diventa l'artefatto principale. Posso conviverci, ma non mi piacciono gli avvertimenti sulla console. C'è un modo per nasconderli (o configurare l'assembly per farlo)? – Synox

+0

quali sono gli avvertimenti? L'ultima sezione della mia risposta affronta il problema principale degli artefatti, se si riesce a cambiare da trattini bassi a trattini –

+1

Gli avvisi sono: [AVVISO] Opzioni di configurazione: 'appendAssemblyId' è impostato su falso, e 'classificatore' mancante . Invece di collegare il file assembly: ... \ app_business.jar, diventerà il file per l'artefatto principale del progetto. NOTA: se per questo progetto sono forniti più descrittori o formati di descrittore, il valore di questo file non sarà deterministico! [WARNING] Sostituzione del file artefatto principale del progetto preesistente: ... \ app_gui.jar con file assembly: .... \ app_gui.jar Vorrei evitare di passare da underscore a hypens. Ma se non posso evitare ... questa soluzione è abbastanza carina. – Synox