【问题标题】:How to add gradle 'compile project' dependencies to published *.pom?如何将 gradle 'compile project' 依赖项添加到已发布的 *.pom?
【发布时间】:2016-06-03 20:34:09
【问题描述】:

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

【问题讨论】:

  • 我找到了解决方法。使用此处描述的 pom API:docs.gradle.org/current/userguide/publishing_maven.html ...我通过 Groovy 中的脚本添加了依赖项 (pom.withXml)。不是很漂亮,但它完成了工作。缺点是我必须重新声明违反 DRY 原则的项目依赖关系。

标签: java gradle pom.xml publishing parent-pom


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-05-27
    • 1970-01-01
    • 2016-06-27
    • 2015-05-03
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    相关资源
    最近更新 更多