Деломбок с использованием Gradle
в рамках нашего процесса сборки мы анализируем наш исходный код с помощью SonarQube.
одна из проблем заключается в том, что мы используем аннотации Ломбока, и SonarQube не очень хорошо справляется с этим-наш код должен быть "delombok".
Delomboked source удалил аннотации и заменил исходный файл окончательным кодом, используемым компилятором.
Это можно сделать в 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)
}
}
проблема у меня с этим заключается в том, что я считаю, что мне понадобится предварительно настроенная система 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. Очевидно, это может быть удалено в соответствии с вашими потребностями.
3 ответов
использование задачи Ant в порядке. Нет необходимости в "предварительной настройке Муравьев". Кроме того, вы можете использовать JavaExec
задача вызвать delombok, как в вашем последнем фрагменте. (JavaExec
в настоящее время не поддерживают -jar
опция, поэтому вам нужно будет назвать основной класс.) Использование плагина Maven из Gradle невозможно (за исключением выполнения Maven с Exec
задач).
Я думаю, что самый простой способ 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')
}
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 plugin и содержимое сборки.Gradle в:
dependencies {
compileOnly 'org.projectlombok:lombok:+'
}