2009-10-05 11 views
7

Nel mio progetto, sto creando molti assembly (4-5) e vengono emessi a target.1/2 di questi assembly non assumono il loro nome finale (o id di assembly), ma come da format artifactID-version.jar..Questo è molto confuso Perché è così?Problema con la creazione dell'assemblaggio

Estratti dal mio pom.xml -

<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.apple</groupId> 
    <artifactId>maven</artifactId> 
    <name>maven_XX</name> 
    <version>0.0.1-SNAPSHOT</version> 


    <build> 
    <plugins> 
    <!-- Added to avoid the compilation issue wrt Annotations --> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <configuration> 
      <source>1.5</source> 
      <target>1.5</target> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.4.2</version> 
     <configuration> 
      <skip>true</skip> 
     </configuration> 
     </plugin> 
     <plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <version>2.2-beta-4</version> 
     <executions>    
      <execution> 
      <id>clientjar</id> 
      <phase>compile</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
      <configuration> 
       <finalName>XX_client</finalName> 
       <appendAssemblyId>false</appendAssemblyId> 
       <descriptors> 
       <descriptor> 
        ${basedir}/src/main/resources/assemblies/clientjar.xml 
       </descriptor> 
       </descriptors> 
      </configuration> 
      </execution> 
      <execution> 
      <id>11***</id> 
      <phase>compile</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
      <configuration> 
       <finalName>11server</finalName> 
       <appendAssemblyId>false</appendAssemblyId> 
       <descriptors> 
       <descriptor> 
        ${basedir}/src/main/resources/assemblies/11server.xml 
       </descriptor> 
       </descriptors> 
       <outputDirectory>assemblies-target</outputDirectory> 
      </configuration> 
      </execution> 
      <execution> 
      <id>cache</id> 
      <phase>compile</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
      <configuration> 
       <finalName>cache</finalName> 
       <appendAssemblyId>false</appendAssemblyId> 
       <descriptors> 
       <descriptor> 
       ${basedir}/src/main/resources/assemblies/cache.xml 
       </descriptor> 
       </descriptors> 
       <outputDirectory>assemblies-target</outputDirectory> 
      </configuration> 
      </execution> 
+0

Non è casuale. Gli assembly specifici non seguono. L'output previsto per ciascuna è jar con il nome finale fornito. Ma li prendo come - Nome del progetto-versione.jar – user170114

risposta

8

Quando si esegue il montaggio, fanno si vede qualcosa di simile questa uscita per la console da Maven ?:

[INFO] [assembly:single {execution: 11***}] 
[INFO] Reading assembly descriptor: C:\test\test-parent2/src/main/resources/assemblies/11server.xml 
[INFO] Building jar: C:\test\test-parent2\assemblies-target\11server.jar 
[WARNING] Configuration options: 'appendAssemblyId' is set to false, and 'classifier' is missing. 
Instead of attaching the assembly file: C:\test\test-parent2\assemblies-target\11server.jar, it will become the file for 
main project artifact. 
NOTE: If multiple descriptors or descriptor-formats are provided for this project, the value of this file will be non-de 
terministic! 

Questo accade perché tutto i vostri gruppi specificano <appendAssemblyId>false</appendAssemblyId> e non è specificato alcun classificatore. Il classificatore è deprecato nella versione 2.2-beta-4, quindi viene comunque ignorato, si tratta di un bug/funzionalità nel plugin.
Come risultato, Maven renderà sempre uno degli assembly l'artefatto "principale" per la confezione jar e non lo si vede nella directory degli assiemi di destinazione.

Per ovviare a questo problema, è possibile specificare che il proprio progetto contenga la confezione pom, quindi associare gli obiettivi per il ciclo di vita del jar al pom.

Per abilitare gli obiettivi process-resources e compile, modificare la confezione in pom, aggiungere la seguente configurazione al proprio pom ed eseguire gli obiettivi del ciclo di vita standard. Ad esempio mvn package o mvn install.

<plugin> 
    <artifactId>maven-resources-plugin</artifactId> 
    <executions>    
    <execution> 
     <id>process-resources</id> 
     <phase>process-resources</phase> 
     <goals> 
     <goal>resources</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 
<plugin> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <executions>    
    <execution> 
     <id>compile</id> 
     <phase>compile</phase> 
     <goals> 
     <goal>compile</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

L'elenco completo degli obiettivi legati al ciclo di vita del vaso può essere trovato nel Costruito nel ciclo di vita Associazioni sezione del Introduction to the Build Lifecycle. Tutti seguono un modello simile agli obiettivi process-resources e compile. Nel tuo caso probabilmente vorrai omettere l'obiettivo jar.

+0

Salve Durante l'esecuzione dell'assembly, ricevo l'avviso come indicato. Quindi, vuoi dire che io uso shude goal = compile per gli assembly (che fornisce i jar) e abilito l'obiettivo di compilazione maven? – user170114

+0

No, intendo rendere il "pom" del packaging del progetto e configurare i plugin in modo che gli obiettivi normalmente eseguiti nel ciclo di vita del jar vengano eseguiti nel ciclo di vita del pom, con la configurazione sopra le risorse e i plugin di compilazione saranno eseguiti durante il ciclo di vita predefinito, quindi si esegue ancora 'mvn install'.Questo risolve il bug nel plug-in di assemblaggio –

+0

Hi .. Ho cambiato la confezione come "pom". Ho aggiunto i due plugin che hai fornito e non ho apportato alcuna modifica di configurazione agli assembly. In esecuzione mvn install, per il 2 ° assembly, sta dando- Causato da: org.apache.maven.project.DuplicateArtifactAttachmentException: Rilevato allegato artefatto duplicato. – user170114

11

Estrarre il commento di Lyle al livello di domanda per fornire visibilità.

Mentre la risposta precedente funziona Lyle fa notare che:

Se ho capito bene, sembra una soluzione un po 'invasiva per ciò che equivale a un bug nel plugin di montaggio. Invece, prova a impostare false nella configurazione. Vedi: MASSEMBLY-352

Per artefatti che non sono collegati alla distribuzione repository questa è una bella soluzione ed ha funzionato bene per me.

... 
<appendAssemblyId>false</appendAssemblyId> 
<attach>false</attach> 
... 
+2

Funziona bene per un progetto "assemblaggio singolo". –

Problemi correlati