【问题标题】:Excluding Dependency with Maven Assembly Plugin使用 Maven 程序集插件排除依赖关系
【发布时间】:2011-11-01 20:45:26
【问题描述】:

我有一个装配项目,它有两个直接依赖项,一个战争和一个 jar。在程序集描述符中,我试图将战争放在一个文件夹中,将 jar 放在另一个文件夹中。因此,我正在使用以下dependencySet sn-p:

 <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”分类器。

【问题讨论】:

  • 对于任何登陆这里的人(被标题误导)试图弄清楚为什么他们的 POM 级依赖排除没有被程序集插件尊重,go right here

标签: maven maven-assembly-plugin


【解决方案1】:

会不会是复制了WAR的传递依赖?

尝试使用任一

<useTransitiveDependencies>false</useTransitiveDependencies>

<useTransitiveFiltering>true</useTransitiveFiltering>

在 WAR 的依赖集中。

Assembly Descriptor documentation

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

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

【讨论】:

  • 我想到了 useTransitiveDependencies 标签。但是,当我尝试在 DependencySet 元素中使用它时,我得到以下信息:“无法识别的标签:'useTransitiveDependencies'”。就好像我使用了一个无法识别的标签(我使用的是 maven 3.0.2 但 maven 3.0.3 做同样的事情)。尽管如此,我在战争中使用了依赖项:树并且可以看到 jar 不是依赖项。此外,当我从程序集项目的 pom 中删除 jar 依赖项时,问题就消失了。另外 - useTransitiveFiltering 似乎没有效果。
【解决方案2】:

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

您能否尝试在 &lt;include&gt; 中明确指定 groupId:artifactId,就像您为 jar 工件所做的那样?

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

【讨论】:

  • 我也试过这个。它仍然包括 jar 工件。调试输出看起来会做正确的事情:“[DEBUG] 包含过滤器的统计信息:o 'mygroup:mywarartifact' [DEBUG] 此工件包含过滤器删除了以下工件:mygroup:myjar:jar:myclassifier :myversion"
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2011-08-27
    • 2015-09-16
    • 2021-09-28
    • 2016-05-16
    • 1970-01-01
    • 2015-09-08
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多