2009-11-17 9 views
1

J'ai un projet Maven qui est un projet enfant. Il a de nombreux projets frères et soeurs et le travail de ce projet est d'obtenir des ressources des frères et soeurs et de les empaqueter dans un fichier zip en utilisant le plugin antrun.Obtention de tous les artefacts Maven de Hudson

<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"> 
    <parent> 
     <artifactId>SystemOfRegistries</artifactId> 
     <groupId>someGroup</groupId> 
     <version>0.0.1-SNAPSHOT</version> 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>someGroup</groupId> 
    <artifactId>deploy-data</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>pom</packaging> 
    <build> 
     <plugins> 
      <plugin> 
       <artifactId>maven-antrun-plugin</artifactId> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <configuration> 
          <tasks> 
           <!-- 
            Place any Ant task here. You can add anything you can add 
            between <target> and </target> in a build.xml. 
           --> 
           <zip destfile="${project.build.directory}/${build.finalName}.zip" 
            whenempty="fail"> 
            <zipfileset dir="${project.parent.basedir}/build/AG" prefix="ag"/> 
           </zip> 
          </tasks> 
         </configuration> 
         <goals> 
          <goal>run</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

Cela a bien fonctionné pour la construction du zip. Cependant, le problème est que le zip n'est pas l'artefact de la construction. Et, par conséquent, il n'y a pas de lien dans Hudson pour le télécharger. Je voudrais soit comprendre comment Hudson à reconnaître cela comme un artefact de Maven, ou Maven pour se rendre compte que le ZIP est l'artefact. (J'avais l'élément d'emballage manquant et puis j'obtiendrais un JAR non désiré comme artefact).

Répondre

1

Vous pouvez utiliser builder-assistant-maven-plugin

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.3</version> 
    <executions> 
     <execution> 
      <id>attach-artifacts</id> 
      <phase>package</phase> 
      <goals> 
       <goal>attach-artifact</goal> 
      </goals> 
      <configuration> 
       <artifacts> 
        <artifact> 
         <file>${project.build.directory}/${build.finalName}.zip</file> 
         <type>zip</type> 
        </artifact> 
       </artifacts> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
1

La construction Helper Maven Plugin (attach-artifact goal) à Maven qu'un fichier doit être ajouté à la liste de Maven des artefacts pour ce projet. Définir l'emballage sur "pom" est la bonne chose à faire dans cette situation.

Notez que si vous exécutez l'objectif "install", votre fichier zip sera également copié dans le référentiel maven local, mais il sera renommé selon les conventions maven. Juste quelque chose à savoir, si vous avez des builds en aval en fonction de cet artefact.

+0

Merci pour la réponse. Puisque j'utilise '$ {project.build.directory}/$ {build.finalName} .zip' comme nom d'artefact, et puisque je n'ai pas écrasé le defaul finalName, le nom de l'artefact résultant est le même que celui de maven insall. Je suppose que maven voit que les conventions de dénomination de maven standard sont déjà sur l'artefact et n'essaie pas de les mettre une seconde fois. – harschware

Questions connexes