Настройка плагина Gradle -Sqlj
Я преобразовал свой проект сборки maven в gradle, и теперь одним из плагинов, которые мы используем в maven, является плагин SQLj. Плагин sqlj имеет дополнительную конфигурацию, которая берет исходные (.sqlj) файлы из определенного пути к папке и затем компилирует их в целевой каталог.java и.ser.
Я не уверен в настройке этого в сборке Gradle. Можете ли вы помочь мне, как написать эту конфигурацию в файле build.gradle.
Я просто включил строку зависимости, эквивалентную gradle, которую я получил от mvncentral.
// https://mvnrepository.com/artifact/org.codehaus.mojo/sqlj-maven-plugin группа компиляции: 'org.codehaus.mojo', имя: 'sqlj-maven-plugin', версия: '1.3'
но он просто не компилирует новый.sqlj из определенного местоположения файла. Я включил такие строки, как applyplugin: java и maven.
Дайте мне знать, если нужно сделать что-то еще.
2 ответа
Вы можете использовать исходный код плагина maven в качестве руководства для разработки задачи Gradle. Вот простая отправная точка
class SqljTask extends DefaultTask {
@Input
String encoding
@Input
List<String> additionalArgs = []
@InputDirectory
File sqljDir
@OutputDirectory
File generatedJava
@OutputDirectory
File generatedResources
@TaskAction
void generate() {
project.mkdir generatedJava
project.mkdir generatedResources
project.fileTree(sqljDir).visit { FileVisitDetails fvd ->
if (!fvd.directory) {
List<String> sqljArgs = []
sqljArgs << "-dir=$generatedJava"
sqljArgs << "-d=$generatedResources"
sqljArgs << "-encoding=$encoding"
sqljArgs << "-compile=false"
sqljArgs << fvd.file.absolutePath
sqljArgs.addAll(additionalArgs)
int result = sqlj.tools.Sql.statusMain(sqljArgs as String[])
if (result != 0) throw new RuntimeException("Can't translate $fvd.file ($returnCode)"
}
}
}
}
Использование в build.gradle
apply plugin: 'java'
task sqlj(type: SqljTask) {
encoding = 'UTF-8'
additionalArgs = ['-status']
sqljDir = file('src/main/sqlj')
generatedJava = file("$buildDir/sqlj/java")
generatedResources = file("$buildDir/sqlj/resources")
}
compileJava.dependsOn sqlj
sourceSets {
main {
java {
srcDir sqlj.generatedJava
}
resources {
srcDir sqlj.generatedResources
}
}
}
Примечание. Эта задача будет выполняться только в том случае, если ввод / вывод задачи изменился с момента последнего успешного выполнения. Так что будет рассмотрено UP-TO-DATE
если ничего не изменилось с момента последней сборки
К сожалению, я не вижу официально поддерживаемой задачи ant для sqlj, кто-то разместил здесь источник для задачи ant, поэтому один из вариантов - обернуть ее с помощью интеграции с Gradle.
Рассматривая исходный код для плагина Maven, кажется, что большая часть логики находится в методе translate, который вызывает sqlj.tools.Sqlj.statusMain()
, Я заметил, что в задаче Maven есть логика, которая обновляет только измененные файлы, это можно сделать в Gradle с помощью добавочной задачи
Надеюсь, это поможет вам начать