Maven如何寻找传递依赖

时间:2019-04-21 10:18:23

标签: java maven gradle

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

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

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

我假设在生成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

需要调试的想法。

1 个答案:

答案 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