4

我有一个这样的分层 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 的依赖关系。

4

1 回答 1

0

在广泛搜索答案并浪费了几个小时之后,我终于找到了解决方案。问题似乎是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 文档

于 2016-02-24T08:35:01.217 回答