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

标签 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 的依赖。

最佳答案

在广泛搜索答案并浪费了几个小时之后,我终于找到了解决方案。问题似乎是 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 block 强制 gradle 等待内容,直到子项目依赖项得到解决,从而生成正确的 *.pom 文件。

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

关于java - 如何将 gradle 'compile project' 依赖项添加到已发布的 *.pom?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35553263/

相关文章:

intellij-idea - 在 IntelliJ 中导入 gradle 项目

java - 编译 fatal error : java. lang.Il legalAccessError : class lombok. javac.apt.LombokProcessor

maven - eclipselink maven 存储库不工作

java - 从另一个类调用方法来获取 x 和 y 问题

java - 将 .dll 文件添加到 jar

未使用 :submodule:build syntax 构建的子模块的 gradle 子模块

java - 与maven集成测试

java - 使用 GSON(或任何其他库)将 JSON 转换为 Java/Scala -> Bean 结构不清楚

java - HttpURLConnection urlConnection = null; (错误)

android - 签名的 Apk 崩溃,不能通过 Android Studio 直接安装