如何添加gradle'编译项目'发布* .pom的依赖关系?

时间:2016-02-22 12:09:10

标签: java gradle pom.xml publishing parent-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的依赖。

1 个答案:

答案 0 :(得分:0)

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

修复结果非常简单。我需要做的就是替换它:

afterEvaluate { project ->

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

}

...用这个(注意包装器):

afterEvaluate

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

有关Gradle构建生命周期和if(!in_array...)的详细信息,请参阅enter image description here