我有一个gradle项目A
,我想将其导出为库,现在我使用maven publish插件从其build.gradle
生成pom.xml。并成功上传到本地人工制品。
现在我可以将其导入另一个项目中,但是没有考虑依赖项。
例如:我的库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
需要调试的想法。
答案 0 :(得分:0)
首先,由于某些外部需求,我将假设您以这种方式生成pom。否则,我建议使用documentation中所述的发布插件。通过这种方式发布到工件变得非常容易。
我的第一个直觉是您可能在依赖项声明中使用了错误的配置。如果您使用的是gradle的较新版本,则应使用 api 配置来获取需要暴露给工件用户的依赖关系。
stage('Test') {
agent {
label "docker"
}
steps {
sh 'docker rm -f $(docker ps -a -q)'
sh 'docker-compose up --build --exit-code-from app'
}
}
有关更多信息,请参阅有关此主题的gradle文档:https://docs.gradle.org/current/userguide/java_library_plugin.html#sec:java_library_configurations_graph