如何解决从Gradle“ compileOnly”生成pom.xml中的Maven“提供”依赖项
如果我理解正确,那么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'
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。