java - maven如何寻找传递依赖
问题描述
我有一个 gradle 项目A
,我想将其导出为库,现在我使用 maven 发布插件从其生成 pom.xml build.gradle
。并成功上传到本地神器。
现在我可以将它导入另一个项目,但不考虑依赖项。
例如:我的库A
有依赖项B
和C
. 当我A
在项目中使用时,它不会下载B
和C
.
我假设我在生成时做错了A
(不正确pom.xml
/或任何其他错误)。
但我想知道,Maven 是如何计算传递依赖的。比如,它扫描哪些文件/位置,它在哪里寻找依赖关系?
代码
pom.xml
在项目中生成的任务A
。
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/
我成功地能够在神器中上传。
我也可以在另一个 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
需要想法来调试。
解决方案
首先,由于一些外部要求,我将假设您以这种方式生产 pom。否则我会建议使用文档中描述的发布插件。以这种方式发布到工件变得非常容易。
我的第一直觉是你可能在你的依赖声明中使用了错误的配置。如果您使用的是较新版本的 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
推荐阅读
- powershell - Powershell - 在 Readline 上使用 Peek 方法有什么好处(而不是 null)?
- npm - 使用 Webpack 和 NPM 构建时使用 Verbose
- css - laravel 找不到 css 和 js
- .net-core - 尝试在 Ubuntu 上的 PowerShell Core 中执行内联命令时,“术语 '-Command' 未被识别为 cmdlet 的名称”
- selenium - 登录 gmail 帐户失败(硒自动化)
- nlp - 在 Tableau 中突出显示关联字符串和字符串变量中的特定单词
- c++ - C++ 函数调用中的自动转换和提升
- java - 如何在不显示打印对话框的情况下使用 JRPrintServiceExporter 更改边距?
- javascript - 如何解构有时被接收为空的对象属性
- java - 音乐播放器应用程序中的歌曲一起播放