0

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

继评论之后,我在 github 上创建了一个测试项目来演示这一点,proj1 模块创建了 2 个 jar 文件。我希望“包”模块中生成的程序集包含它们,但它不只包含主项目 jar。

https://github.com/unluckypixie/maven-packaging-test

请注意:我知道 proj1 的 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>
4

2 回答 2

0

I have managed to get this working by using the attachmentClassifier in my assembly file, e.g:

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

Thanks to khmarbaise for your help, I might not have used your solution but it helped me get there!

于 2012-08-01T14:36:37.950 回答
0

根据您的帖子创建了一个示例项目(对其进行了一些修复),如果我做了

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

这对我来说看起来不错。问题是你期待什么?

于 2012-07-30T14:04:57.580 回答