Java maven 2.2 war构建不会将类放入关联的*-classes.jar文件中

Java maven 2.2 war构建不会将类放入关联的*-classes.jar文件中,java,maven,build,maven-2,Java,Maven,Build,Maven 2,我正在尝试构建一个(war)项目,在该项目中,我从另一段代码中复制并修改了pom.xml文件,出于某种原因,当我mvn clean package安装软件时,它没有将类包含在相关的*-classes.jar文件中。Maven版本是Ubuntu12.10上的2.2.1 我是maven的新手,主要通过复制和粘贴示例来管理,所以我基本上不知道我的pom是如何工作的(它包含在下面的全文中) 该项目有一个war元素,maven-war-plugin配置部分对archiveClasses和attachCla

我正在尝试构建一个(war)项目,在该项目中,我从另一段代码中复制并修改了pom.xml文件,出于某种原因,当我
mvn clean package
安装软件时,它没有将类包含在相关的*-classes.jar文件中。Maven版本是Ubuntu12.10上的2.2.1

我是maven的新手,主要通过复制和粘贴示例来管理,所以我基本上不知道我的pom是如何工作的(它包含在下面的全文中)

该项目有一个
war
元素,
maven-war-plugin
配置部分对
archiveClasses
attachClasses
进行了说明,我认为这就是生成*-classes.jar文件的原因。运行构建后,我的目标目录如下所示:

richard@holly:~/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
但是sword2-server-1.0-classes.jar不包含以下任何类:

richard@holly:~/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
同时,该目录中的所有其他*.jar文件包含源文件的所有相关信息(javadocs、source等都已完成)

毫无疑问,我缺少某种形式的插件配置,但到目前为止,我无法理解maven插件文档,因此非常感谢任何帮助

(几乎)完整的pom.xml(为了简洁起见,省略了实际的依赖项):


4.0.0
org.swordapp
sword2服务器
1
战争
SWORD v2::公共服务器库
具有由服务器实现的接口的公共服务器库
希望提供支持
http://www.swordapp.org/
maven发布插件
org.apache.maven.plugins
maven编译器插件
2.3.2
6.
6.
org.apache.maven.plugins
maven jar插件
真的
真的
org.apache.maven.plugins
maven源插件
违约
包裹
罐子
org.apache.maven.plugins
maven javadoc插件
违约
包裹
罐子
org.apache.maven.plugins
maven战争插件
真的
真的
WEB-INF/lib/*.jar
WEB-INF/lib/*.jar
真的
${basedir}/src/main/webapp
WEB-INF/WEB.xml
准备包装
....

您应该尝试通过降低复杂性来简化问题,首先尝试以下简单配置:

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

结果是,
archiveclass
attachclass
不能很好地协同工作。
attachClasses
的文档说,在war构建期间,它将把webapps
classes
目录中的文件放入一个*-classes.jar中。但是
archiveclass
将webapp中
classes
目录的内容放入webapp的
lib
目录中的jar文件中。因为这意味着,如果这两个配置标志都设置为true,则
classes
目录中没有要放入*-classes.jar的类

答案是从配置中删除
archiveclass
,然后一切都按预期运行


这似乎是一个maven bug,它在maven 2和maven 3中的行为都是一样的。

不幸的是,即使这样,也只会生成一个空的sword2-server-1.0-classes.jar文件
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <configuration>
        <archiveClasses>true</archiveClasses>
        <attachClasses>true</attachClasses>
    </configuration>
</plugin>
mvn clean package