使用Maven Assembly插件排除依赖关系

我有一个装配项目有两个直接的依赖关系,一个战争和一个罐子。 在装配描述符中,我试图将战争放在一个文件夹中,而将战争放在另一个文件夹中。 因此,我正在使用以下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不应该复制时包括任何依赖性JAR文件。


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

    你可以尝试在<include>明确指定groupId:artifactId,就像你为jar工件做的那样?

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

    我想到了。 我打算查看汇编插件的源代码来找出问题所在。 在这样做的时候,我注意到我正在使用程序集2.2-beta-1。 升级到2.2完全解决了这个问题。 经验教训,我应该总是在下次检查插件的版本。

    链接地址: http://www.djcxy.com/p/29613.html

    上一篇: Excluding Dependency with Maven Assembly Plugin

    下一篇: Maven assembly plugin does not overwrite files during compile phase