Maven 2 Maven组件的组装

Maven 2 Maven组件的组装,maven-2,maven-assembly-plugin,Maven 2,Maven Assembly Plugin,我有一个多模块maven 2项目,它使用程序集(在打包阶段通过maven assembly插件)以某种方式打包每个模块。然后,我尝试使用另一个模块将这些程序集组合成一个可分发的“安装程序”包。对于安装程序模块,我可以从我的其他项目中看到默认的jar,但我所做的一切似乎都不能让我访问额外的程序集。从文档来看,这应该是可能的,所以我假设我不是做错了什么,就是Maven中的一个bug?我已经被这件事困扰了好几天了,所以任何帮助都将不胜感激 根据一条评论,我在github上创建了一个测试项目来演示这一点

我有一个多模块maven 2项目,它使用程序集(在打包阶段通过maven assembly插件)以某种方式打包每个模块。然后,我尝试使用另一个模块将这些程序集组合成一个可分发的“安装程序”包。对于安装程序模块,我可以从我的其他项目中看到默认的jar,但我所做的一切似乎都不能让我访问额外的程序集。从文档来看,这应该是可能的,所以我假设我不是做错了什么,就是Maven中的一个bug?我已经被这件事困扰了好几天了,所以任何帮助都将不胜感激

根据一条评论,我在github上创建了一个测试项目来演示这一点,proj1模块创建了2个jar文件。我希望在“package”模块中生成的程序集能够同时包含这两个部分,但它并不包括主项目jar

请注意:我知道proj1-one的JAR内容在本例中是相同的,但它们不在我的实际情况中,我认为proj1文件中的内容与问题无关

如果您运行:

mvn clean package
然后执行
ls proj1/target/*.jar
您应该看到:

proj1/target/proj1-1.0-SNAPSHOT.jar
proj1/target/proj1-1.0-SNAPSHOT-proj1-assembly.jar
如果您查看包jar:

jar -tvf package/target/package-1.0-SNAPSHOT-package-assembly.jar
您将看到如下内容:

     0 Mon Jul 30 16:27:00 BST 2012 META-INF/
   106 Mon Jul 30 16:26:58 BST 2012 META-INF/MANIFEST.MF
     0 Mon Jul 30 16:21:46 BST 2012 package/
  2358 Mon Jul 30 16:21:44 BST 2012 package/proj1-1.0-SNAPSHOT.jar
  2363 Mon Jul 30 16:21:46 BST 2012 package/package-1.0-SNAPSHOT.jar
我想知道为什么
proj1/target/proj1-1.0-SNAPSHOT-proj1-assembly.jar
不在其中

包装部件如下所示:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">

    <id>package-assembly</id>

    <formats>
        <format>jar</format>
    </formats>

    <includeBaseDirectory>false</includeBaseDirectory>

    <moduleSets>
        <moduleSet>
            <useAllReactorProjects>true</useAllReactorProjects>

            <includes>
                <include>org.test.parent:*</include>
            </includes>

            <binaries>
                <outputDirectory>/package/</outputDirectory>
                <unpack>false</unpack>
            </binaries>
        </moduleSet>
    </moduleSets>
</assembly>

包装组件
罐子
假的
真的
org.test.parent:*
/包装/
假的
我已经在你的帖子上创建了一个(对它进行了一些修复),如果我做了

mvn clean package
我在package/target/package-1.0.0-SNAPSHOT-package-assembly.zip下找到了包含

package/
package/proje1-1.0.0-SNAPSHOT.jar
package/package-1.0.0-SNAPSHOT.jar

我觉得还可以。问题是您期望的是什么?

我通过在我的程序集文件中使用attachmentClassifier成功地实现了这一点,例如:

    <moduleSet>
        <useAllReactorProjects>true</useAllReactorProjects>

        <includes>
            <include>org.me:*</include>
        </includes>

        <binaries>
            <outputDirectory>/output/dir</outputDirectory>
            <unpack>false</unpack>
            <includeDependencies>false</includeDependencies>
            <attachmentClassifier>my-assembly</attachmentClassifier>
        </binaries>
    </moduleSet>

真的
org.me:*
/输出/目录
假的
假的
我的集会

感谢khmarbaise的帮助,我可能没有使用你的解决方案,但它帮助我实现了目标

如果查看proj1目标文件夹,应该有两个输出jar,一个是您得到的,另一个是以程序集名称作为后缀的,例如“proje1-1.0.0-SNAPSHOT-proj1-assembly.jar”,这就是我要找的那个。因此,我总结一下,输出文件中应该有3个JAR,两个称为proj1*,一个称为package*。。。我以前没有在stackoverflow上发布过,所以我没有想到。添加了pull请求来解决您的问题。应该有两个pull请求,否则您可以查看分叉项目。