gpt4 book ai didi

java - maven如何寻找传递依赖

转载 作者:行者123 更新时间:2023-12-02 06:26:35 24 4
gpt4 key购买 nike

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

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

例如:我的库 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 依赖项的裁剪输出

|    |    \--- 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

需要调试的想法。

最佳答案

首先,我假设您由于某些外部需求而以这种方式生成 pom。否则,我建议使用发布插件,如 documentation 中所述。 。通过这种方式,发布到 Artifact 变得非常容易。

我的第一直觉是您可能在依赖项声明中使用了错误的配置。如果您使用的是较新版本的 gradle,则应该使用 api 配置来获取需要向 Artifact 的任何用户公开的依赖项。

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

关于java - maven如何寻找传递依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55781854/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com