0

我正在尝试为我们的项目建立类似 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 看不到类路径文件没有改变?

问候,阿恩

4

0 回答 0