1

我有一个带有子项目的 gradle 项目。每个子项目都会生成一个 jar 和一个 pom,并将其发布在存储库中

1) 在主项目 gradle 文件中有一个子项目部分,我用它来定义发布内容和发布位置:

来自 rootproject.gradle 的片段:

subprojects {
    apply plugin: 'maven-publish'

    publishing {

        publications {
            mavenJava(org.gradle.api.publish.maven.MavenPublication) {
                from components.java
            }
        }

        repositories {
            maven {
                url 'file://c:/temp/repo'
            }
        }
    }
}

2) 在我的一个子项目的 gradle 文件中,我添加了一些依赖项:

来自 subproject.gradle 的片段:

dependencies {
    compile group: 'my-group', name: 'my-module', version:'1.1.0'
}

如果我从 rootproject 运行“ gradle publish ”,它将正确发布每个子项目。但是,我注意到与子项目相关的 pom 发布中缺少子项目中定义的依赖项。

如果我在每个子项目中剪切并粘贴子项目部分的内容,则生成的 pom 文件包含正确的依赖项。似乎“<strong>from components.java”不是对发布任务应该用来生成pom的东西的引用,但是当您调用“from”方法时,该任务将准确发布 components.java 包含的内容.

作为一种解决方法,我在根中定义的方法中移动了子项目代码:

根项目.gradle

def configurePublishing(project) {
    project.apply plugin: 'maven-publish'
    …
}

我从每个子项目中调用它:

子项目.gradle

dependencies {
    compile group: 'my-group', name: 'my-module', version:'1.1.0'
}

configurePublishing(project)

另一种解决方案可能是在子项目部分添加一个开关,并将所有内容集中在根项目的 gradle 文件中:

subprojects { subProject ->
    switch(subproject.name) {
        case: ‘my-subproject-with-dependencies’ {
            dependencies {
                compile group: 'my-group', name: 'my-module', version:'1.1.0'
            }
            break;
        }
    }

    apply plugin: 'maven-publish'
}

这是一种可接受的方法吗?是否有最佳实践可以遵循?有更简单的方法吗?

4

0 回答 0