发布时未指定gradle子项目版本

drkbr07n  于 2023-04-21  发布在  其他
关注(0)|答案(3)|浏览(149)

我有两个Nexus仓库:一个用于发布,另一个用于快照。我在发布任务中有代码来定义根据文档选择哪个仓库:

repositories {
            repositories {
                maven {
                    credentials {
                        username "$nexusUser"
                        password "$nexusPassword"
                    }
                    def releasesRepoUrl = "https://xxx/repository/factoring-maven-release/"
                    def snapshotsRepoUrl = "https://xxx/repository/factoring-maven-snapshots/"
                    url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
                }
            }
            publications {
                create("default", MavenPublication.class) {
                    from(components["java"])
                }
            }
        }
    }

本代码包含的子项目:

rootProject.name = 'xxx-integration-lib'

include 'xxx-service1-dto'
include 'xxx-service2-dto'

subprojects build.gradle:

group = "xxx"
version = "0.0.6-SNAPSHOT"

但这不起作用,因为子项目版本总是未指定。已尝试:
1.正在创建新的allproject任务以返回版本
1.使用 project.property('propName')-但这似乎是一种变通方法,而不是解决方案
有什么想法吗

ndh0cuux

ndh0cuux1#

对我来说唯一有效的方法是一个变通方案:将子项目版本管理放在root build.gradle中,如下所示

project(':subproject1') {
    version '0.0.6-SNAPSHOT'
}

project(':subproject2') {
    version '0.0.12-SNAPSHOT'
}

project(':subproject14) {
    version '0.0.5-SNAPSHOT'
}

然后project.version属性被正确注入

c86crjj0

c86crjj02#

我正在使用gradle进行多模块项目,我们没有在子模块中设置版本。我们所做的只是在gradle.properties文件的基础项目中设置它。

group = "xxx"
version = "0.0.6-SNAPSHOT"

你可以使用它:

url = project.version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
j0pj023g

j0pj023g3#

而不是用这个

publishing {
    publications {
        nexus(MavenPublication) {
            from components.java
        }
    }
    repositories {
        maven {
            def releasesRepoUrl = 'https://.../releases/'
            def snapshotsRepoUrl = 'https://.../snapshots/'
            url = project.version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl

            credentials {
                ...
            }
        }
    }
}

在发布和存储库块之外使用***afterEvaluate***块。

publishing {
    afterEvaluate {
        publications {
            nexus(MavenPublication) {
                from components.java
            }
        }
        repositories {
            maven {
                def releasesRepoUrl = 'https://.../releases/'
                def snapshotsRepoUrl = 'https://.../snapshots/'
                url = project.version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl

                credentials {
                    ...
                }
            }
        }
    }
}

相关问题