【问题标题】:Maven assembly plugin useProjectArtifact option not working in multi-module projectMaven 程序集插件 useProjectArtifact 选项在多模块项目中不起作用
【发布时间】:2014-02-05 10:57:16
【问题描述】:

我正在尝试将模块的主要工件保留在程序集插件复制的二进制文件之外。 useProjectArtifact 应该可以做到这一点,但它对我没有任何影响。

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

<excludes><useProjectAttachments> 不应该是必需的,但即使它们也无济于事。

查看调试输出,很明显 Mavne 甚至在开始处理依赖集之前就已经复制了模块工件......这是有道理的,事实上我一直期待 <useProjectArtifact> 元素会直接出现在 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>

【问题讨论】:

  • 有什么理由不在您的依赖项中使用“提供”的 maven 范围?
  • 您使用哪个版本的 Maven 和 maven-assembly-plugin?你能显示完整的程序集描述符,而不仅仅是它的一部分吗?
  • 我正在使用 maven 3.1.0 和装配插件 v. 2.4。描述符中除了 标头和 之外没有其他内容。我想我刚刚找到了答案,请参阅我的下一个回复。
  • @Aurélien 不确定您的意思,我确实希望 javax.mail 进入程序集,因此它不是“提供”而是“运行时”。问题是主模块工件被包含在内 - 这不是依赖项,而且 AFAIK 它没有范围。

标签: maven maven-assembly-plugin


【解决方案1】:

我刚刚意识到,dependencySets 可以在程序集的顶层使用,并且实际上,当在该层而不是在 moduleSet 中使用时,useProjectArtifact 属性会完成它应该做的事情。

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

【讨论】:

    猜你喜欢
    • 2014-07-27
    • 2011-03-09
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    • 2011-09-03
    相关资源
    最近更新 更多