如何防止Gradle uploadArchives删除编译Maven依赖项

时间:2018-08-17 21:26:24

标签: gradle

我有一个基于java-library的Gradle项目,其中有一些api依赖项和一些implementation依赖项(请参见下面的简化版)。我需要从中生成一个Maven pom.xml文件,因为某些客户端基于Maven。

apply plugin: 'java-library'

dependencies {
    api lib.slf4j_api
    implementation lib.commons_lang3,
            lib.maven_model,
            lib.annotations,
            lib.commons_io
    testImplementation lib.mockito_all
    testImplementation(lib.testng) {
        exclude(module: 'aopalliance')
        exclude(module: 'guava')
    }
}

test.useTestNG()

在构建了这个项目并将其上传到Maven Central之后(从我的CI作业中),由于缺少我应该随同我的库交付的类(标为api的类),客户端由于编译问题而失败。

不幸的是,我检查了上传的pom.xml,发现它们实际上缺少了所有的api依赖项。

然后,我在笔记本电脑上进行了一些研究,发现当我运行./gradlew install时,pom.xml(在build/poms下)是正确生成的(使用api包含的依赖项并标记为compile,与Maven中的api类似。但是,在我运行./gradlew uploadArchives之后,将修改生成的pom.xml(以添加我已配置的额外元数据,如下面所示的config snippet),但此时,所有compile({{1 }})依赖项已删除,仅剩下apiruntime)和implementationtest)个!

testImplementation

对我来说,这似乎是// Publishing non test modules if (!testModules.contains(name)) { project.ext['ossrhUsername'] = "$System.env.SONATYPE_USER" project.ext['ossrhPassword'] = "$System.env.SONATYPE_PASSWORD" uploadArchives { repositories { mavenDeployer { if (!version.endsWith("SNAPSHOT")) { beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) } } repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") { authentication(userName: ossrhUsername, password: ossrhPassword) } snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots/") { authentication(userName: ossrhUsername, password: ossrhPassword) } pom.project { name project.name description project.description packaging 'jar' licenses { license { name 'MIT' url 'https://opensource.org/licenses/MIT' } } } } } } } 中的错误,但我只是想确保在举报之前,我实际上没有做错什么,特别是因为我用Google搜索了它,却找不到任何人一个类似的问题。

谢谢!

0 个答案:

没有答案