我正在尝试为我们的项目建立类似 maven 的依赖管理的某种支持。为此,我将要继承的 pom 添加为 buildscript 中的类路径依赖项。我编写了一个插件,它添加了一个任务“继承”,该任务将文件作为输入并解析它并将来自该 pom 的依赖项放入映射中。该任务是在插件的 apply 方法中启动的,我从类路径中获取 pom。
static class InheritDependencyTask extends DefaultTask {
@InputFile
File pomForInheritance
@Input
def dependencyMap
@TaskAction
public void processPom(){
def parsedPom = new XmlSlurper().parse(pomForInheritance)
parsedPom.dependencyManagement.dependencies.dependency.each { dependency ->
def key = dependency.groupId.text() + ":" + dependency.artifactId.text()
String version = dependency.version.text()
if (version.contains("\$")) {
String propertyKey = version.replace("\${", "").replace('}', '')
version = parsedPom.properties.getAt(propertyKey)
}
dependencyMap.put(key, version)
}
}
}
在插件的 apply 方法中,我添加了任务并使编译依赖于它:
project.compileJava.dependsOn("inherit")
project.task("inherit", type: InheritDependencyTask){
dependencyMap = project.dependencyMap
pomForInheritance = project.buildscript.configurations.classpath.find { File dependency -> (dependency.name.contains(MY_ARTIFACT_ID) )}
}
在其他一些时候,我遍历我的依赖项并根据我从 pom.xml 获得的版本更改版本。
这一切似乎都奏效了。但是 compileJava 永远不会是最新的。它总是需要重新编译。我做错了什么还是 gradle 看不到类路径文件没有改变?
问候,阿恩