0

我已经将我的 maven 构建项目转换为 gradle,现在我们在 maven 中使用的插件之一是 SQLj 插件。sqlj 插件具有额外的配置,从特定文件夹路径获取源 (.sqlj) 文件,然后将它们编译到 .java 和 .ser 特定目标目录。

我不确定在 gradle 构建中配置它。你能帮我如何在 build.gradle 文件中编写这些配置吗?

我刚刚包含了与我从 mvncentral 获得的 gradle 等效的依赖行。

// https://mvnrepository.com/artifact/org.codehaus.mojo/sqlj-maven-plugin 编译组:'org.codehaus.mojo',名称:'sqlj-maven-plugin',版本:'1.3'

但它只是没有从特定文件位置编译新的 .sqlj。我已经包括了像 applyplugin: java 和 maven 这样的行。

让我知道是否需要做任何额外的事情。

4

2 回答 2

1

您可以使用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因此,如果自上次构建以来没有任何变化,则会考虑

于 2018-05-10T21:21:34.747 回答
0

Unfortunately I can't see an officially supported sqlj ant task, someone posted source for an ant task here so one option is to wrap that using Gradle's ant integration

Having a look at the source code for the Maven plugin it seems like most of the logic is in the translate method which calls sqlj.tools.Sqlj.statusMain(). I notice there's logic in the Maven task which only updates the files which have changed, this could be done in Gradle via an incremental task

Hope this helps you to get started

于 2018-05-08T05:34:36.870 回答