我有一个基于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 }})依赖项已删除,仅剩下api
(runtime
)和implementation
(test
)个!
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搜索了它,却找不到任何人一个类似的问题。
谢谢!