作为构建过程的一部分,我们使用SonarQube分析源代码。
这样做的一个问题是,我们使用了Lombok批注,而SonarQube无法很好地处理这一问题-我们的代码需要进行“delombok”处理。
Delomboked源删除了注释,并将源文件替换为编译器使用的最终代码。
这可以在gradle中完成(请参阅here)。
好吧,部分。通常,可以使用Ant任务来分发源代码。下面的代码示例:
task delombok {
// delombok task may depend on other projects already being compiled
dependsOn configurations.compile.getTaskDependencyFromProjectDependency(true, "compileJava")
// Set up incremental build, must be made in the configuration phase (not doLast)
inputs.files file(srcJava)
outputs.dir file(srcDelomboked)
doLast {
FileCollection collection = files(configurations.compile)
FileCollection sumTree = collection + fileTree(dir: 'bin')
ant.taskdef(name: 'delombok', classname: 'lombok.delombok.ant.DelombokTask', classpath: configurations.compile.asPath)
ant.delombok(from:srcJava, to:srcDelomboked, classpath: sumTree.asPath)
}
}
我遇到的问题是,我相信我需要一个预先配置的ant系统(我尚未使它工作)。
另一种方法是使用Maven lombok:delombok插件(请参阅here)。但是,我不知道如何执行此操作,以及是否还需要预先配置的环境。
我不确定哪种方法最好。不需要预先配置的构建系统并且可以从gradle / gradlew完全运行的方法将是可取的。
最终目的是要有一个“delombok”项目任务,该任务基本上将执行以下任务:
java -jar lombok.jar delombok src -d src-delomboked
编辑
因此,我几乎可以通过以下代码片段来使用它:-
dependencies {
compile 'org.projectlombok:lombok:1.14.2'
}
task delombok {
description 'Delomboks the entire source code tree'
def srcDelomboked = 'build/src-delomboked'
def srcJava = 'src'
inputs.files file( srcJava )
outputs.dir file( srcDelomboked )
doLast {
def collection = files( configurations.compile + configurations.testCompile )
def sumTree = collection + fileTree( dir: 'bin' )
ant.taskdef( name: 'delombok', classname: 'lombok.delombok.ant.DelombokTask',
classpath: configurations.compile.asPath +
configurations.testCompile.asPath )
ant.delombok( from:srcJava, to:srcDelomboked, classpath: sumTree.asPath )
// Replace current src directory with delomboked source
copy {
from srcDelomboked
into srcJava
}
}
}
使用delombok ant任务。
使用。
最佳答案
使用Ant任务很好。不需要“Ant预配置”。另外,您可以使用JavaExec
任务像上一个代码片段一样调用delombok。 (JavaExec
当前不支持-jar
选项,因此您必须命名主类。)无法使用Gradle中的Maven插件(除了使用Exec
任务执行Maven之外)。
关于gradle - Delombok使用Gradle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24997441/