我正在尝试为我们的项目为类似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中获取的版本更改版本。
这一切似乎都有效。但compileJava永远不会是最新的。它总是要重新编译。我做错了什么或者没有看到classpath文件没有改变?
此致 ·阿尔