【问题标题】:How does maven look for transitive dependencymaven如何寻找传递依赖
【发布时间】:2019-04-21 10:18:22
【问题描述】:

我有一个 gradle 项目 A,我想将其导出为库,现在我使用 maven 发布插件从其 build.gradle 生成 pom.xml。并成功上传到本地神器。

现在我可以将它导入另一个项目,但不考虑依赖项。

例如:我的库A 具有依赖关系BC。当我在项目中使用A 时,它不会下载BC

我假设我在生成 A 时做错了(不正确的 pom.xml/ 或任何其他错误)。

但我想知道,Maven 是如何计算传递依赖的。比如,它扫描哪些文件/位置,在哪里查找依赖项?

代码

在项目A中生成pom.xml的任务。

task writeNewPom << {
    pom {
        project {
            groupId 'com.a.b'
            version '1.0.0'
        }
    }.writeTo("src/main/resources/META-INF/maven/com.a.b/feature-store-lib/pom.xml")
}

我的 pom.xml 的位置在META-INF/maven/com.a.b/feature-store-lib/

我可以成功上传到 artifactory。

我也可以在另一个 gradle 项目中正确导入,但缺少它的传递依赖项。

这是gradle dependencies的裁剪输出

|    |    \--- org.junit.platform:junit-platform-commons:1.3.1 (*)
|    \--- junit:junit:4.12
|         \--- org.hamcrest:hamcrest-core:1.3
+--- com.a.b:feature-store-lib:0.4
+--- io.github.microutils:kotlin-logging:1.6.22
|    +--- io.github.microutils:kotlin-logging-common:1.6.22

如您所见,没有来自 com.a.b:feature-store-lib:0.4

需要调试的想法。

【问题讨论】:

  • Maven 和 Gradle 都在 Maven 存储库中查找它们。不过,如果您也在另一个项目中使用 Gradle,那么 Maven 是如何做的就无关紧要了。您混淆了 Maven 存储库和 pom.xml 定义,以及 Maven 构建工具。 Gradle 使用存储库和 pom,但不使用 Maven 构建工具。
  • 如果您发布了相关代码和错误,我们可以提供帮助。
  • @JBNizet 对,我对它们有点困惑。但现在掌握了它,我也在另一个项目中使用 gradle。现在,我不确定 gradle 构建工具如何查找 pom.xml 定义,因为显然这不起作用。也会发布代码。
  • 如果您发布了相关代码和错误,我们可以提供帮助。
  • @JBNizet 发布了更多详细信息。

标签: java maven gradle


【解决方案1】:

首先,我将假设由于某些外部要求,您正在以这种方式生产 pom。否则我建议使用documentation 中描述的发布插件。通过这种方式发布到工件变得非常容易。

我的第一反应是你可能在你的依赖声明中使用了错误的配置。如果您使用的是较新版本的 gradle,您应该使用 api 配置来处理需要向您的工件的任何用户公开的依赖项。

dependencies {
    api 'org.apache.httpcomponents:httpclient:4.5.7' // Exposed
    implementation 'org.apache.commons:commons-lang3:3.5' // Not exposed
}

有关更多信息,请参阅有关此主题的 gradle 文档:https://docs.gradle.org/current/userguide/java_library_plugin.html#sec:java_library_configurations_graph

【讨论】:

    猜你喜欢
    • 2014-01-19
    • 1970-01-01
    • 2018-07-06
    • 2013-02-17
    • 2019-08-23
    • 2019-10-29
    • 2018-04-28
    • 2021-10-24
    相关资源
    最近更新 更多