Gradle Incremental Build不会在目标路径中生成文件夹结构

时间:2017-02-09 11:27:28

标签: java gradle build incremental-build

Gradle Incremental Build任务检测项目中已更改的文件,并编译并仅将这些文件放入目标目录。

问题是,当它将这些更改文件放入目标目录但它没有制作包时。

例如:假设我有包' org / example / test.java'当我使用gradle运行任务并且它检测到test.java文件发生更改时,它会编译并放入目标目录,如: '目标/项目/ WEB-INF /类/的Test.class'不做任何包裹。 但我需要' target / project / WEB-INF / classes / org / example / test.class'

任何帮助表示赞赏。我把我的gradle任务代码放在下面:

task incrementalReverse(type: IncrementalReverseTask) {
    inputDir = file('src/java')
    outputDir = file("${tempBuildPath}/WEB-INF/classes")
}


class IncrementalReverseTask extends DefaultTask {

@InputDirectory
def File inputDir

@OutputDirectory
def File outputDir

@TaskAction
void execute(IncrementalTaskInputs inputs) {
    println inputs.incremental ? "CHANGED inputs considered out of date"
                               : "ALL inputs considered out of date"
    if (!inputs.incremental)
        project.delete(outputDir.listFiles())

    inputs.outOfDate { change ->
        println "out of date: ${change.file.name}"
        def targetFile = new File(outputDir, change.file.name)
        targetFile.text = change.file.text.reverse()
    }

    inputs.removed { change ->
        println "removed: ${change.file.name}"
        def targetFile = new File(outputDir, change.file.name)
        targetFile.delete()
    }
}
} 

1 个答案:

答案 0 :(得分:1)

def targetFile = new File(outputDir, change.file.name)
targetFile.parentFile.mkdirs()