从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'
        }
    }
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...