2012-12-15 2 views
1

J'essaye de construire un projet (guerre) dans lequel j'ai copié et modifié le fichier pom.xml à partir d'un autre morceau de code, et pour une raison quelconque quand je mvn clean package le logiciel, il n'inclut pas les classes dans le fichier * -classes.jar associé. La version de Maven est 2.2.1 sur Ubuntu 12.10. Je suis très novice dans maven, et gère en grande partie par copier-coller à partir d'exemples, donc je n'ai pratiquement aucune idée de comment fonctionne mon pom (il est inclus en entier ci-dessous).maven 2.2 war build ne place pas de classes dans le fichier * -classes.jar associé

Le projet a un élément <packaging>war</packaging>, et la section de configuration maven-war-plugin dit archiveClasses et attachClasses, que je suppose est ce qui cause le fichier * -classes.jar à construire. Une fois que j'ai couru la construction, mon répertoire cible se présente comme suit:

[email protected]:~/Code/External/JavaServer2.0/target$ ls 
apidocs generated-sources surefire   sword2-server-1.0-classes.jar sword2-server-1.0-sources.jar 
classes maven-archiver  sword2-server-1.0 sword2-server-1.0-javadoc.jar sword2-server-1.0.war 

Mais le sword2-server-1.0-classes.jar ne contient aucune des classes:

[email protected]:~/Code/External/JavaServer2.0/target$ jar tf sword2-server-1.0-classes.jar 
META-INF/ 
META-INF/MANIFEST.MF 
META-INF/maven/ 
META-INF/maven/org.swordapp/ 
META-INF/maven/org.swordapp/sword2-server/ 
META-INF/maven/org.swordapp/sword2-server/pom.xml 
META-INF/maven/org.swordapp/sword2-server/pom.properties 

Pendant ce temps tous les autres fichiers * .jar dans ce répertoire contiennent toutes les informations pertinentes pour les fichiers source (javadocs, source, etc, sont tous complets). Il me manque sans aucun doute une forme de configuration de plugin, mais je suis incapable de comprendre la documentation du plugin maven, donc toute aide est grandement appréciée.

La (presque) complète pom.xml (omis les dépendances réelles par souci de brièveté):

<?xml version="1.0" encoding="UTF-8"?> 
<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/xsd/maven-4.0.0.xsd"> 

<modelVersion>4.0.0</modelVersion> 
<groupId>org.swordapp</groupId> 
<artifactId>sword2-server</artifactId> 
<version>1.0</version> 
<packaging>war</packaging> 

<name>SWORD v2 :: Common Server Library</name> 
<description> 
    Common Server Library with interfaces to be implemented by servers 
    wishing to provide SWORD v2 support 
</description> 
<url>http://www.swordapp.org/</url> 

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-release-plugin</artifactId> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3.2</version> 
      <configuration> 
       <source>6</source> 
       <target>6</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <configuration> 
       <archive> 
        <manifest> 
         <addDefaultImplementationEntries> 
          true 
         </addDefaultImplementationEntries> 
         <addDefaultSpecificationEntries> 
          true 
         </addDefaultSpecificationEntries> 
        </manifest> 
       </archive> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-source-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>default</id> 
        <phase>package</phase> 
        <goals> 
         <goal>jar</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-javadoc-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>default</id> 
        <phase>package</phase> 
        <goals> 
         <goal>jar</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <configuration> 
       <archiveClasses>true</archiveClasses> 
       <attachClasses>true</attachClasses> 
       <packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes> 
       <warSourceExcludes>WEB-INF/lib/*.jar</warSourceExcludes> 
       <webResources> 
        <resource> 
         <filtering>true</filtering> 
         <directory>${basedir}/src/main/webapp</directory> 
         <includes> 
          <include>WEB-INF/web.xml</include> 
         </includes> 
        </resource> 
       </webResources> 
      </configuration> 
      <executions> 
       <execution> 
        <phase>prepare-package</phase> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

<dependencies> 
    .... 
</dependencies> 
</project> 

Répondre

5

Il se avère que archiveClasses et attachClasses ne jouent pas bien ensemble. La documentation pour attachClasses indique qu'il mettra les fichiers dans le répertoire webapps classes dans un * -classes.jar pendant la construction de la guerre. Mais archiveClasses place le contenu du répertoire classes dans la webapp dans un fichier jar dans le répertoire lib de la webapp. Comme cela signifie qu'il n'y a pas de classes dans le répertoire classes à placer dans le fichier * -classes.jar si ces deux indicateurs de configuration sont définis sur true.

La réponse est de supprimer archiveClasses de la configuration, puis tout se comporte comme prévu.

Cela semble que c'est probablement un bug Maven, et il se comporte de la même dans les deux maven 2 et 3. maven

+0

parfait. Merci. –

3

Vous devriez essayer de faire bouillir le problème en réduisant la complexité juste essayer une configuration simple comme suit d'abord:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <configuration> 
     <archiveClasses>true</archiveClasses> 
     <attachClasses>true</attachClasses> 
    </configuration> 
</plugin> 

Après cela juste essayer:

mvn clean package 
+2

Même cela génère juste un fichier vide sword2-server-1.0-classes.jar malheureusement –

Questions connexes