Mik*_*der 9 java dependencies gradle pom.xml maven
在Gradle中,如何生成具有动态依赖关系的POM文件,该文件已解析为使用的实际版本?
dependencies {
testCompile(group: 'junit', name: 'junit', version: '4.+')
}
Run Code Online (Sandbox Code Playgroud)
这是从上面的依赖项生成的.
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.+</version>
<scope>test</scope>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
我希望将其+解析为如下的应计版本.
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
关于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)
}
Run Code Online (Sandbox Code Playgroud)
需要一些努力来编写代码.两个主要部分是:
Configuration#getIncoming或Configuration#getResolvedConfigurationAPI 查询已解析的版本XMlParserAPI 操作POM (假设使用了新的maven-publish插件)有关ConfigurationAPI的信息可以在Gradle Build Language Reference中找到,它可以进一步链接到Javadoc.完整的Gradle分布包含一个演示POM操作的小样本.有关的信息XmlParser可以在Groovy文档中找到.
| 归档时间: |
|
| 查看次数: |
6095 次 |
| 最近记录: |