在Gradle中,如何生成动态依赖关系解析为所使用的实际版本的POM文件?

在Gradle中,如何生成动态依赖关系解析为所使用的实际版本的POM文件?

dependencies {

testCompile(group: 'junit', name: 'junit', version: '4.+')

}

这是根据上面的依赖关系生成的。

<dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.+</version>

<scope>test</scope>

</dependency>

</dependencies>

我想将其+解析为如下的应计版本。

<dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.12</version>

<scope>test</scope>

</dependency>

</dependencies>

Maven

Publishing上的Gradle指南一章讨论了如何执行此操作,但未提及操作方法。

使用此钩子,可以修改POM的任何方面。例如,您可以将用于依赖项的版本范围替换为用于生成内部版本的实际版本。

回答:

使用Peter Niederwieser答案中的信息,我创建了一个任务,该任务读取包含动态依赖项的POM,并使用已解决依赖关系的新pom覆盖它。

/**

* Reads and Overwrites POM file resolving dynamic dependencies

*/

task cleanPom(dependsOn: writeNewPom) << {

// Get existing pom file

Node xml = new XmlParser().parse(pomFileLocation)

// Generate map of resolved versions

Map resolvedVersionMap = new HashMap()

Set<ResolvedArtifact> resolvedArtifacts = configurations.compile.getResolvedConfiguration().getResolvedArtifacts()

resolvedArtifacts.addAll(configurations.testCompile.getResolvedConfiguration().getResolvedArtifacts())

resolvedArtifacts.each {

resolvedVersionMap.put(it.getName(), it.getModuleVersion().getId().getVersion())

}

// Update dependencies with resolved versions

xml.dependencies.first().each {

Node artifactId = it.get("artifactId").first()

def artifactName = artifactId.value().first()

def artifactVersion = resolvedVersionMap.get(artifactName)

Node version = it.get("version").first()

version.value = artifactVersion

}

// Overwrite existing pom file

new XmlNodePrinter(new PrintWriter(new FileWriter(pomFileLocation))).print(xml)

}

回答:

这将需要一些努力来进行编码。两个主要部分是:

  • 使用Configuration#getIncomingConfiguration#getResolvedConfigurationAPI 查询已解析的版本
  • 使用Groovy的XMlParserAPI 操纵POM (假设使用了新maven-publish插件)

关于ConfigurationAPI的信息可以在Gradle Build Language

Reference中找到,该参考文献进一步链接到Javadoc。完整的Gradle发行版包含一个演示POM操作的小样本。有关信息,XmlParser可以在Groovy文档中找到。

以上是 在Gradle中,如何生成动态依赖关系解析为所使用的实际版本的POM文件? 的全部内容, 来源链接: utcz.com/qa/418574.html

回到顶部