Настройка плагина Gradle -Sqlj - PullRequest
0 голосов
/ 08 мая 2018

Я преобразовал свой проект сборки 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 ]

0 голосов
/ 11 мая 2018

Вы можете использовать исходный код из плагина 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, если ничего не изменилось с момента последней сборки

0 голосов
/ 08 мая 2018

К сожалению, я не вижу официально поддерживаемой задачи ant для sqlj, кто-то разместил исходник для задачи ant здесь , поэтому один из вариантов - обернуть это с помощью интеграции с Gradle's ant

Если посмотреть на исходный код плагина Maven, кажется, что большая часть логики заключается в методе translate , который вызывает sqlj.tools.Sqlj.statusMain(). Я заметил, что в задаче Maven есть логика, которая обновляет только измененные файлы, это можно сделать в Gradle с помощью добавочной задачи

Надеюсь, это поможет вам начать

...