gradle - Delombok使用Gradle

标签 gradle lombok

作为构建过程的一部分,我们使用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
        }
    }
}
  • 这第一位确保可以将 Lombok jar 用于抓取
    使用delombok ant任务。
  • 然后我们将源文件配置为
    使用。
  • 接下来,我们设置gradle以使用ant任务。
  • 最后,复制任务将整个源树替换为代码的分拆版本。显然,可以根据您的需要将其删除。
  • 最佳答案

    使用Ant任务很好。不需要“Ant预配置”。另外,您可以使用JavaExec任务像上一个代码片段一样调用delombok。 (JavaExec当前不支持-jar选项,因此您必须命名主类。)无法使用Gradle中的Maven插件(除了使用Exec任务执行Maven之外)。

    关于gradle - Delombok使用Gradle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24997441/

    相关文章:

    android - 在Android Studio中安装Roboguice

    java - SonarQube 没有看到 @Service 的 @RequiredArgsConstructor,有什么建议吗?

    spring-boot - 使用Intellij IDEA Community Edition 2019.2.4和Gradle无法在生成文件夹中生成Lombok源

    android - 在根项目中找不到任务 'installRelease'

    在 Ubuntu 上找不到 Java 应用程序主类

    hibernate - 执行 Grails 服务的 Gradle 任务

    java - 将默认公共(public)构造函数添加到生成的构建器内部类

    java - 使用 Jackson 与 Lombok builder 反序列化

    java - 使用 lombok 访问字段的字段

    java - 在 Gradle 依赖项中添加本地 PKCS11 JAR,以便解析子依赖项