Delombok使用Gradle

Vea*_*KII 16 gradle lombok

作为构建过程的一部分,我们使用SonarQube分析源代码.

这样做的一个问题是我们使用Lombok注释并且SonarQube没有很好地处理它 - 我们的代码需要'delombok'ed.

Delomboked源删除了注释,并使用编译器使用的最终代码替换源文件.

这可以在gradle中完成(见这里).

好吧,部分.通常,Ant任务可用于delombok源.代码示例如下: -

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)
        }
    }
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,我相信我需要一个预配置的蚂蚁系统(我还没有让它工作).

另一种方法是使用Maven lombok:delombok插件(见这里).但是我不知道如何做到这一点,如果这还需要预先配置的环境.

我不确定哪种方法最好.不需要预先配置的构建系统并且可以从gradle/gradlew完全工作的方法将是优选的.

最终目标是进行"delombok"项目任务,基本上执行以下操作:

java -jar lombok.jar delombok src -d src-delomboked
Run Code Online (Sandbox Code Playgroud)

编辑

所以我几乎可以使用这个代码片段: -

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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
  • 第一个位确保lombok jar可用于使用delombok ant任务进行gradle.
  • 然后我们配置要使用的源文件.
  • 接下来我们设置gradle来使用ant任务.
  • 最后,复制任务用代码的删除版本替换整个源代码树.显然,这可以删除,以满足您的需求.

And*_*eim 10

我认为使用gradle来最简单的方法是:

task delombok {
    description 'Delomboks the source code'
    ant.taskdef(classname: 'lombok.delombok.ant.Tasks$Delombok', classpath: configurations.compile.asPath,  name: 'delombok')
    ant.mkdir(dir: 'build/src-delomboked') 
    ant.delombok(verbose: 'true', encoding: 'UTF-8', to: 'build/src-delomboked', from: 'src/main/java')
}
Run Code Online (Sandbox Code Playgroud)

  • 只包含lombok.jar到路径就足够了,即:`classpath:configurations.compile.filter {(it.name.startsWith('lombok'))} .asPath`.将所有"编译"依赖项包含到项目中可能会导致问题.如果某些'compile'依赖项在多项目构建中的另一个项目上(例如`compile project(':otherproject')),那么这个项目的gradle`:clean`任务就会因项目的"无法删除文件"而失败罐. (3认同)
  • 另外,将`ant.mkdir`和`ant.delombok`行包装在`doLast {...}`中,以便它们在(且仅在)调用任务时运行。如图所示,_delombok_任务无条件运行。 (2认同)

Pet*_*ser 3

使用 Ant 任务就可以了。不需要“Ant 预配置”。或者,您可以使用JavaExec任务来调用 delombok,如上一个片段所示。(JavaExec目前不支持该-jar选项,因此您必须命名主类。)无法使用 Gradle 中的 Maven 插件(除了使用任务执行 Maven 之外Exec)。