【问题标题】:Is there any Gradle -Sqlj plugin available to do sqlj translation as we do using maven sqlj plugin?是否有任何 Gradle -Sqlj 插件可用于进行 sqlj 翻译,就像我们使用 maven sqlj 插件一样?
【发布时间】:2018-05-08 03:18:40
【问题描述】:

我已将我的 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。

如果需要做任何其他事情,请告诉我。

【问题讨论】:

    标签: java maven gradle sqlj


    【解决方案1】:

    您可以使用source code from the maven plugin 作为开发 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

    【讨论】:

    • 我只收到一个错误。 " 无法在此任务类的第 29 行获取 sqlj 的未知属性。您能帮忙吗?我通过给出“gradle sqlj”命令运行任务
    • 您需要将 sqlj jar(s) 添加到 buildscript 类路径
    【解决方案2】:

    不幸的是,我看不到官方支持的 sqlj ant 任务,有人发布了 ant 任务的源代码 here 所以一个选择是使用 Gradle's ant integration 包装它

    查看 Maven 插件的源代码,似乎大部分逻辑都在调用 sqlj.tools.Sqlj.statusMain()translate 方法中。我注意到 Maven 任务中的逻辑仅更新已更改的文件,这可以通过 incremental task 在 Gradle 中完成

    希望这可以帮助您入门

    【讨论】:

    • 不确定如何调用 Java 中的 ant 任务。
    • 哪位大神说说如何在ant的build.xml中调用java ant任务并举例
    • 您可以将任务源代码放在buildSrc/src/main/java 中,这样它就位于 buildscript 类路径中。然后通过ant.taskdef定义一个ant任务见here
    • 我已经成功编译了sqlj,附带了ant任务文件。我能够将它作为一个单独的 ant 项目运行,并且能够翻译 sqlj。
    • 但我现在的问题是,在 gradle 中我通过 import 语句调用 ant 构建
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 2014-01-14
    • 1970-01-01
    相关资源
    最近更新 更多