Maven程序集插件useProjectArtifact选项在多模块项目中不起作用

时间:2014-02-05 10:57:16

标签: maven maven-assembly-plugin

我试图将模块的主要工件保留在由程序集插件复制的二进制文件之外。 useProjectArtifact应该完全这样做,但它对我没有任何影响。

在myGroup下面的配置中:myModule是多模块项目的模块之一,并从该多模块项目中调用程序集插件。

不应该需要<excludes><useProjectAttachments>,但即使他们没有帮助。

看看调试输出,很明显Mavne在开始处理依赖集之前已经复制了模块工件......这是有道理的,事实上我一直期待着<useProjectArtifact> element将直接出现在moduleSet或binaries元素中(因为它不适用于依赖项)...但是XSD不支持它。

这让我发疯,任何建议都会受到欢迎!

Maven调试输出:

    [DEBUG] Processing binary artifact for module project: myGroup:myModule:bundle:4.1.0.1-SNAPSHOT
[DEBUG] Adding artifact: myGroup:myModule:bundle:4.1.0.1-SNAPSHOT with file: C:\root\myModule\target\myModule-4.1.0.1-SNAPSHOT.jar to assembly location: outputdir/myModule-4.1.0.1-SNAPSHOT.jar.
[DEBUG] Adding file: C:\root\myModule\target\myModule-4.1.0.1-SNAPSHOT.jar to archive location: MyProject-4.1.0.1-SNAPSHOT/outputdir/myModule-4.1.0.1-SNAPSHOT.jar
[WARNING] NOTE: Currently, inclusion of module dependencies may produce unpredictable results if a version conflict occurs.
[DEBUG] Processing binary dependencies for module project: myGroup:myModule:bundle:4.1.0.1-SNAPSHOT
[DEBUG] Processing DependencySet (output=null)
[DEBUG] Filtering dependency artifacts WITHOUT transitive dependency path information.

配置:

 <moduleSet>
            <includes>
                <include>myGroup:myModule</include>
            </includes>

            <binaries>
                <excludes>
                    <exclude>myGroup:myModule</exclude>
                </excludes>
                <outputDirectory>outputdir</outputDirectory>
                <unpack>false</unpack>
                <dependencySets>
                    <dependencySet>
                        <useProjectArtifact>false</useProjectArtifact>
                        <useProjectAttachments>false</useProjectAttachments>
                        <useTransitiveDependencies>false</useTransitiveDependencies>
                        <includes>
                            <include>*:javax.mail</include>
                        </includes>
                    </dependencySet>
                </dependencySets>
            </binaries>
        </moduleSet>

1 个答案:

答案 0 :(得分:0)

我刚刚意识到dependencySets可以在程序集中的顶层使用,实际上当在那个级别而不是在moduleSet中使用时,useProjectArtifact属性会执行它应该做的事情。

所以我不确定在moduleSet中是否不支持该属性,或者这是否是Maven缺陷。 我确实使用toplevel dependencySet解决了我的特定用例,模块的javax.mail依赖项也是多模块项目的依赖项,因此它被正确地包含在程序集中。