如何将 gradle 'compile project' 依赖项添加到已发布的 *.pom?

How to add gradle 'compile project' dependencies to published *.pom?

我有一个像这样的分层 gradle 2.4 项目:

Root
|- subProject1
|- subProject2
|- subProject3

对于每个子项目,我想发布一个.jar文件和一个.pom文件并将它们存储在maven仓库中.所有常规 compile('com.example:awesome-lib') 命令都已正确导出到 *.pom 文件中。

让我们假设 subProject2 有一个 compile project(':subProject1') 依赖。此依赖项 将不会包含在生成的 *.pom 文件 中。

我的 gradle 发布结构如下所示:

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
            groupId project.group
            artifactId jar.baseName
            version project.version
        }
    }
}

...我做错了什么吗?为什么我的 compile project 依赖项不会导出到 *.pom 文件中?有什么解决方法吗?为澄清起见,我在上面的示例中期望的结果是 subProject2.pom 声明对 subProject1.jar.

的依赖

在广泛搜索答案并浪费了几个小时之后,我终于找到了解决方案。问题似乎是 gradle 中的执行顺序。在我的依赖被写入*.pom文件的时候,子项目之间的依赖还没有解决

事实证明,修复非常简单。我需要做的就是替换这个:

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
            groupId project.group
            artifactId jar.baseName
            version project.version
        }
    }
}

...有了这个(注意包装):

afterEvaluate { project ->

    publishing {
        publications {
            mavenJava(MavenPublication) {
                from components.java
                groupId project.group
                artifactId jar.baseName
                version project.version
            }
        }
    }

}

afterEvaluate 块强制 gradle 等待内容,直到子项目依赖关系得到解决,从而生成正确的 *.pom 文件。

有关 gradle 构建生命周期和 afterEvaluate 的更多详细信息,请参阅 gradle documentation