2009-06-19 5 views
10

Raison: Notre projet utilise Ant comme interface de ligne de commande. Après avoir fait un nouvel assemblage avec le plugin d'assemblage de maven, je veux faire des tests initiaux pour voir si tout a été correctement assemblé. Par conséquent, j'ai besoin d'inclure les tests unitaires dans l'assemblage final. Après l'assemblage, les essais initiaux seraient alors appelés STH commeComment puis-je inclure des tests unitaires dans un assemblage maven?

> ant initTest 

build.xml:

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

problème est: Je veux garder mes tests unitaires dans src/test/java et non déplacez-les vers src/main/java. Existe-t-il un moyen de dire au module d'assemblage d'inclure mes tests unitaires? Un simple comprennent dans le descripteur de montage ne le fait pas ...

Répondre

10

Il y a deux étapes:

  1. package tests dans un pot, ainsi que le code principal.
  2. Dépend de ce pot "-tests" dans le module qui fait l'assemblage.

Pour emballer les tests, vous devez bin l'objectif jar:test-jar. par exemple.

<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> 

Ensuite, dans le module d'assemblage, vous pouvez dépendre de l'artefact résultant.

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

Le bit de clé est le "classificateur".

+2

la dépendance devrait probablement avoir aussi la portée "test" –

2

La réponse de @ Dominic-Mitchell n'a pas fonctionné pour moi du tout. Ce qui a finalement fonctionné était d'ajouter un fileSet pour les classes de test à mon assembly xml. Notez que les répertoires fileSet sont différents! Cela m'a bloqué le plus longtemps.

Utilisez ${project.build.directory} pour les classes de test et ${project.build.outputDirectory} pour principal:

<?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> 

crédit où le crédit est dû - Je trouve cette solution dans ce blog ici: http://alexgaddie.blogspot.com/2010/02/creating-uber-jar-with-maven.html
Je n'ai pas besoin de la profile partie de l'article de blog.

1

Ce qui suit fonctionne pour nous.

pom.xml extrait:

<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 extrait:

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

La clé est la balise useProjectAttachments.