Подтвердить что ты не робот

Delombok с использованием Gradle

В рамках нашего процесса сборки мы анализируем наш исходный код с помощью SonarQube.

Одна из проблем заключается в том, что мы используем аннотации Lombok, и SonarQube не справляется с этим очень хорошо - наш код должен быть "delombok'ed".

Delomboked source удаляет аннотации и заменяет исходный файл конечным кодом, используемым компилятором.

Это можно сделать в gradle (см. здесь).

Ну, частично. Обычно для источника delombok можно использовать задачу 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 (см. здесь). Однако я не знаю, как это сделать, и если для этого также потребуется предварительно настроенная среда.

Я не уверен, что это лучший подход. Предпочтительным будет подход, который не требует предварительно сконфигурированной системы сборки и может полностью работать от 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
        }
    }
}
  • Этот первый бит гарантирует, что ломбокская банка доступна для gradle для используя задачу delombok Ant.
  • Затем мы настраиваем исходные файлы на использовать.
  • Затем мы устанавливаем gradle для использования задачи Ant.
  • Наконец, задача копирования заменяет все дерево исходных текстов на delomboked версию кода. Очевидно, это можно было бы удалить в соответствии с вашими потребностями.
4b9b3361

Ответ 1

Использование задачи Ant в порядке. Нет необходимости "Ant preconfiguration". Кроме того, вы можете использовать задачу JavaExec для вызова delombok, как в вашем последнем фрагменте. (JavaExec в настоящее время не поддерживает параметр -jar, поэтому вам нужно будет назвать основной класс.) Использование плагина Maven из Gradle невозможно (за исключением выполнения Maven с задачей Exec).

Ответ 2

Я думаю, что самый простой способ для источников delombok с 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')
}

Ответ 3

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:+'
}