问题描述
如果我理解正确,那么Gradle的compileOnly
依赖项就对应于Gradle的较旧的provided
,同时,Maven POM的provided
也对应。它在Gradle世界中完美运行。
但是,compileOnly
不会在provided
生成的pom.xml
中生成任何maven-publish
依赖项。
我们正在使用Gradle将Maven工件发布到Maven Central。我们想在Gradle的provided
的已发布pom.xml
中明确声明compileOnly
。
有人知道有没有简单的方法可以做到这一点?或者,我们是否需要在:
中编写我们自己的Gradle脚本?publishing {
publications {
maven(MavenPublication) {
pom {
/* Our own Gradle scripting to declare provided dependencies. */
}
}
}
}
解决方法
我知道我们可以通过如下所示编写脏脚本来对其进行调整,但是我们基本上不希望尽可能地在build.gradle
中使用“脚本”。
publishing {
publications {
maven(MavenPublication) {
pom {
withXml {
project.configurations.compileOnly.allDependencies.each { dependency ->
asNode().dependencies[0].appendNode("dependency").with {
it.appendNode("groupId",dependency.group)
it.appendNode("artifactId",dependency.name)
it.appendNode("version",dependency.version)
it.appendNode("scope","provided")
}
}
}
}
}
}
}
,
我认为脚本编写是一种方法...您可以创建一个方法来传递pom,例如
publishing {
publications {
mavenDependencyList(MavenPublication) {
fixDependencyScope(pom)
}
}
}
void fixDependencyScope(pom) {
pom.withXml {
asNode().dependencies.'*'.findAll() {
it.scope.text() == 'compileOnly' && project.configurations.compile.allDependencies.find { dep ->
dep.name == it.artifactId.text()
}
}.each() {
it.scope*.value = 'provided'
}
}
}