簡體   English   中英

從 Gradle “compileOnly” 在 pom.xml 中生成 Maven “提供的”依賴項

[英]Generate Maven “provided” dependency in pom.xml from Gradle “compileOnly”

如果我理解正確,Gradle 的compileOnly依賴對應於 Gradle 較舊的provided ,同時 Maven POM 的provided 它在 Gradle 世界中完美運行。

但是, compileOnly不會在maven-publish生成的pom.xml中生成任何provided的依賴項。

我們正在使用 Gradle 將 Maven 工件發布到 Maven Central。 我們想在 Gradle 的compileOnly發布的pom.xml中明確聲明provided


有誰知道是否有任何簡單的方法可以做到這一點? 或者,我們是否需要編寫自己的 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")
              }
          }
        }
      }
    }
  }
}

我認為腳本是 go 的方式...你可以創建一個方法來傳遞 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'
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM