使用Maven程序集插件排除依赖关系

时间:2011-11-01 20:45:27

标签: maven maven-assembly-plugin

我有一个包含两个直接依赖项的装配项目,一个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'分类器。

3 个答案:

答案 0 :(得分:1)

它是否正在复制WAR的传递依赖?

尝试使用

<useTransitiveDependencies>false</useTransitiveDependencies>

<useTransitiveFiltering>true</useTransitiveFiltering>

在WAR的dependencySet中。

Assembly Descriptor documentation

如果关闭useTransitiveDependencies(默认情况下它处于启用状态),则不应复制WAR的传递依赖关系。

如果useTransitiveFiltering处于打开状态(默认情况下处于关闭状态),则您定义的过滤器将应用于WAR的传递依赖关系,因为这包括*:war不应包含任何复制时的依赖JAR。

答案 1 :(得分:0)

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

您可以尝试在<include>中明确指定groupId:artifactId,就像您对jar工件一样吗?

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

答案 2 :(得分:0)

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