В процессе сборки мы анализируем исходный код с помощью SonarQube.
Одна из проблем заключается в том, что мы используем аннотации Lombok, а SonarQube не очень хорошо справляется с этим — наш код нужно «деломбокить».
Исходный код Delomboked удалил аннотации и заменил исходный файл окончательным кодом, используемым компилятором.
Это можно сделать в gradle (см. здесь).
Ну, частично. Обычно задачу 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)
}
}
Проблема, с которой я столкнулся, заключается в том, что я считаю, что мне понадобится предварительно настроенная система муравьев (мне еще предстоит заставить это работать).
Другим подходом может быть использование плагина Maven lombok:delombok (см. здесь). Однако я не знаю, как это сделать и потребуется ли для этого предварительно настроенная среда.
Я не уверен, что это лучший подход. Предпочтителен подход, который не требует предварительно настроенной системы сборки и может полностью работать из 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
}
}
}
- Этот первый бит гарантирует, что банка ломбока доступна для градации для использования задачи муравья delombok.
- Затем мы настраиваем исходные файлы для использования.
- Затем мы настраиваем gradle для использования задачи ant.
- Наконец, задача копирования заменяет все исходное дерево деломбоксированной версией кода. Очевидно, это может быть удалено в соответствии с вашими потребностями.
Tasks
, поэтому имя класса в приведенном выше ant taskdef необходимо изменить наclassname: 'lombok.delombok.ant.Tasks$Delombok'
. - person Dominik   schedule 06.11.2017