Delombok使用Gradle

时间:2014-07-28 14:24:58

标签: gradle lombok

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

这样做的一个问题是我们使用Lombok注释并且SonarQube没有很好地处理这个问题 - 我们的代码需要被“删除”。

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

这可以在gradle中完成(参见here)。

嗯,部分原因。通常,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)
        }
    }

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

另一种方法是使用Maven lombok:delombok插件(参见here)。但是,我不知道如何执行此操作,如果这也需要预先配置的环境。

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

最终的目标是拥有一个“淘汰赛”。项目任务基本上执行以下任务:

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

3 个答案:

答案 0 :(得分:10)

我认为使用gradle来最简单的delombok来源是:

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')
}

答案 1 :(得分:3)

使用Ant任务很好。不需要“Ant预配置”。或者,您可以使用JavaExec任务来调用delombok,就像在上一个代码段中一样。 (JavaExec目前不支持-jar选项,因此您必须为主类命名。)使用Gradle中的Maven插件是不可能的(除了使用{{执行Maven) 1}}任务)。

答案 2 :(得分:1)

https://github.com/franzbecker/gradle-lombok

buildscript {
    repositories {
        maven { url 'https://plugins.gradle.org/m2/' }
    }
    dependencies {
        classpath 'io.franzbecker:gradle-lombok:1.6'
    }
}

apply plugin: 'java'
apply plugin: 'io.franzbecker.gradle-lombok'
UPD:目前我已经足够了IntelliJ IDEA 2016.3 + Lombok插件 和内容build.gradle:

dependencies {
    compileOnly 'org.projectlombok:lombok:+'
}