2009-06-19 16 views
10

Motivo: il nostro progetto utilizza Ant come interfaccia a riga di comando. Dopo aver creato un nuovo assieme con il plugin di montaggio di maven, voglio fare dei test iniziali per vedere se tutto è stato assemblato correttamente. Pertanto ho bisogno di includere i test unitari nell'assemblaggio finale. Dopo il montaggio, i test iniziali saranno poi chiamati STH comeCome posso includere i test di unità nell'assemblaggio di Maven?

> ant initTest 

build.xml:

<target="initTest"> 
    <junit> 
    <test class="MyTest" /> 
    </junit> 
</target> 

Il problema è: voglio mantenere mio test di unità in src/test/java e non spostali in src/main/java. C'è un modo per dire al plugin dell'assembly di includere i miei test unitari? Un semplice includono nel descrittore di assemblaggio non lo fa ...

risposta

10

ci sono due fasi:

  1. della confezione i test in un barattolo, nonché il codice principale.
  2. Dipende dal vaso "-test" nel modulo che crea l'assembly.

Per impacchettare i test, è necessario bloccare l'obiettivo jar:test-jar. per esempio.

<build> 
    <plugins> 
    <plugin> 
     <artifactId>maven-jar-plugin</artifactId> 
     <executions> 
     <execution> 
      <id>test-jar</id> 
      <phase>package</phase> 
      <goals> 
      <goal>test-jar</goal> 
      </goals> 
     </execution> 
     </executions> 
    </plugin> 
    </plugins> 
</build> 

Quindi nel modulo di assieme, è possibile dipendere dall'oggetto derivato.

<dependencies> 
    <dependency> 
    <groupid>${project.groupId}</groupId> 
    <artifactId>some-artifact</artifactId> 
    <version>${project.version}</version> 
    <classifier>tests</classifier> 
    </dependency> 
</dependencies> 

Il bit chiave è il "classificatore".

+2

la dipendenza dovrebbe probabilmente avere anche l'ambito "test" –

2

La risposta di @ Dominic-Mitchell non ha funzionato affatto per me. Ciò che alla fine ha funzionato è stato aggiungere un fileSet per le classi di test al mio assembly xml. Si noti che le directory fileSet sono diverse! Questo mi ha bloccato per il tempo più lungo.

Usa ${project.build.directory} per le classi di test e ${project.build.outputDirectory} per le principali:

<?xml version='1.0' encoding='UTF-8'?> 
<assembly> 
    <id>toolbar-test</id> 
    <formats> 
     <format>jar</format> 
    </formats> 

    <includeBaseDirectory>false</includeBaseDirectory> 

    <fileSets> 
     <fileSet> 
      <directory>${project.build.directory}/test-classes</directory> 
      <outputDirectory>/</outputDirectory> 
     </fileSet> 
     <fileSet> 
      <directory>${project.build.outputDirectory}</directory> 
      <outputDirectory>/</outputDirectory> 
     </fileSet> 
    </fileSets> 

    <dependencySets> 
     <dependencySet> 
      <scope>runtime</scope> 
      <unpack>true</unpack> 
      <unpackOptions> 
       <excludes> 
        <exclude>**/LICENSE*</exclude> 
        <exclude>**/README*</exclude> 
       </excludes> 
      </unpackOptions> 
     </dependencySet> 
     <dependencySet> 
      <scope>test</scope> 
      <unpack>true</unpack> 
     </dependencySet> 
    </dependencySets> 
</assembly> 

di credito che è di Cesare - ho trovato questa soluzione all'interno di questo post del blog qui: http://alexgaddie.blogspot.com/2010/02/creating-uber-jar-with-maven.html
non ho bisogno la parte profile di il post del blog.

1

I seguenti lavori per noi.

pom.xml frammento:

<build> 
    <plugins> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>2.6</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>test-jar</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin>   
    </plugins> 
</build> 

assembly.xml frammento:

<dependencySets> 
    <dependencySet> 
     <outputDirectory>/lib</outputDirectory> 
     <useProjectArtifact>true</useProjectArtifact> 
     <useProjectAttachments>true</useProjectAttachments> 
     <scope>runtime</scope> 
    </dependencySet> 
</dependencySets> 

La chiave è il tag useProjectAttachments.

Problemi correlati