排除Maven组件插件的依赖关系



我有一个具有两个直接依赖项的汇编项目,一个war和一个jar。在程序集描述符中,我试图将war放在一个文件夹中,而jar放在另一个文件夹中。因此,我使用以下dependencySet代码片段:

 <dependencySets>
    <dependencySet>
        <outputDirectory>webapps</outputDirectory>
        <includes>
            <include>*:war</include>
        </includes>
        <directoryMode>750</directoryMode>
        <fileMode>660</fileMode>
    </dependencySet>
    <dependencySet>
        <outputDirectory>bin</outputDirectory>
        <includes>
            <include>mygroup:my-jar-artifact</include> 
        </includes>
        <directoryMode>750</directoryMode>
        <fileMode>660</fileMode>
    </dependencySet>
</dependencySets>

然而,当我执行"mvn assembly:single"时,它总是最终将jar放在webapps目录中。我已经尝试了所有可能的方法来强制它排除jar(包括添加排除标签等)。我知道我可以通过使用maven依赖项插件将jar复制到一个文件夹,然后使用程序集描述符将平面文件复制过来来解决这个问题。然而,我真的觉得我应该能够使用依赖集来做到这一点。什么好主意吗?

附加信息:

  • 我正在使用maven 3.0.2,但maven 3.0.3显示相同的行为。
  • 我对jar的pom依赖使用了一个"jar-with-dependencies"分类器。

可能是它复制了WAR的传递依赖关系吗?

尝试使用

<useTransitiveDependencies>false</useTransitiveDependencies>

<useTransitiveFiltering>true</useTransitiveFiltering>

在WAR的dependencySet .

程序集描述符文档

如果useTransitiveDependencies被关闭(默认是打开的),WAR的传递依赖不应该被复制。

如果useTransitiveFiltering是打开的(默认是关闭的),您定义的过滤器将应用于WAR的传递依赖项,并且由于这包括*:war,因此在复制时不应该包括任何依赖jar。

另一种可能是语法*:war不正确。

您是否可以尝试在<include>中显式指定groupId:artifactId,就像您为jar工件所做的那样?

<includes>
    <include>mygroup:my-war-artifact</include> 
</includes>

我明白了。我打算看看源代码的汇编插件,以找出问题。在这样做时,我注意到我使用的是汇编2.2-beta-1。升级到2.2完全修复了这个问题。学到的教训是,下次我应该总是检查插件的版本。

最新更新