【问题标题】:Maven assembly plugin: how to include provided dependencies of transitive dependenciesMaven 程序集插件:如何包含传递依赖项的提供的依赖项
【发布时间】:2016-02-23 04:02:11
【问题描述】:

似乎包含provided 范围的直接依赖关系是很好理解的。似乎也很容易实现包含 runtime 范围的传递依赖项。

但是我怎样才能在两个间接级别之外包含依赖项呢?

例子:

A --> B --> C

其中 A 依赖于 B(编译范围),B 依赖于 C(提供的范围)。

我希望 A 检索 C(例如:在本地下载 jar),无论是通过程序集描述符还是 maven-dependency-plugin:copy-dependencies 或其他机制。

我似乎尝试了上述两个插件的所有选项组合。这两种方法都没有涵盖这种情况。它们都得到B(即使B 被更改为提供的依赖项),以及B 的任何编译范围依赖项,但没有提供B 的依赖项。

我想我正在尝试做一些类似于我的项目的阴影表示但没有解包依赖项的事情。

当然,我不想在 A 的 pom 中枚举 B 的所有依赖项——我想隐式递归地检索(然后打包)所有依赖项。

【问题讨论】:

    标签: maven maven-assembly-plugin maven-dependency-plugin


    【解决方案1】:

    虽然 Tunaki 非常正确,但我找到了一个总比没有好的可行解决方案,它使用了一个不太知名的插件(注意:仅适用于 Maven

    这指定了两个依赖块。第一个引入正常的编译依赖,包括传递,它与使用复制依赖项相同。第二个块除了正常的 pom 依赖声明外还特别提到了 B(不幸的是,但至少两个依赖项都在同一个 pom 中)并请求其提供的 deps:

            <plugin>
                <groupId>com.github.goldin</groupId>
                <artifactId>copy-maven-plugin</artifactId>
                <version>0.2.5</version>
                <executions>
                    <execution>
                        <id>get-provided-dependencies</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                            <resources>
                                <resource>
                                    <targetPath>${project.build.directory}/lib</targetPath>
                                    <dependencies>
                                        <dependency>
                                            <includeScope>compile</includeScope>
                                        </dependency>
                                        <dependency>
                                            <groupId>some.group</groupId>
                                            <artifactId>artifact_i_call_B</artifactId>
                                            <version>1.0</version>
                                            <includeScope>provided</includeScope>
                                        </dependency>
                                    </dependencies>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
    

    此插件的文档此时可能仅存在于存档中,不确定发生了什么: http://web.archive.org/web/20130826193436/http://evgeny-goldin.com/wiki/Copy-maven-plugin

    【讨论】:

      【解决方案2】:

      您将无法做到这一点。这不是maven-assembly-plugin 的限制,而是Maven 考虑传递依赖的方式。始终会省略范围为 provided 的传递依赖项(请参阅文档中的 this table)。

      关于这个 (MNG-2205) 有一个未解决的错误,但我认为它不会很快得到修复。这确实是预期的行为,因为 provided 依赖项,根据名称,应该在运行时提供。

      【讨论】:

        猜你喜欢
        • 2014-04-25
        • 1970-01-01
        • 2015-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-17
        相关资源
        最近更新 更多