首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gradle项目中最新JOOQ库的JOOQ插件

gradle项目中最新JOOQ库的JOOQ插件
EN

Stack Overflow用户
提问于 2014-08-16 10:09:38
回答 2查看 6K关注 0票数 7

在我的java gradle项目中,在为最新的JOOQ库找到一个可用的JOOQ插件或它的配置时,我遇到了问题。

我发现了以下插件:

由于错误消息,这对我不起作用:

代码语言:javascript
复制
Could not find any version that matches org.jooq:jooq-codegen-gradle:latest.integration.
Searched in the following locations:
    http://repo1.maven.org/maven2/org/jooq/jooq-codegen-gradle/maven-metadata.xml
    http://repo1.maven.org/maven2/org/jooq/jooq-codegen-gradle/

这只适用于JOOQ3.2.2(最新的3.4.2不起作用)。如果我将其设置为3.4.2,jooqGenerate将成功执行,但是数据获取会调用错误消息:

代码语言:javascript
复制
Error:(12, 8) java: org.jooq.generated.tables.records.PersonsRecord is not abstract and does not override abstract method values(java.lang.Integer,java.lang.String,java.lang.String) in org.jooq.Record3

我做错了什么?

这是我的gradle.build:

代码语言:javascript
复制
apply plugin: 'java'
apply plugin: 'jooq'

sourceCompatibility = 1.5
version = '1.0'

repositories {
    jcenter()
}

dependencies {
    compile 'org.jooq:jooq:3.4.2'
    compile 'org.jooq:jooq-meta:3.4.2'
    compile 'org.jooq:jooq-codegen:3.4.2'
    testCompile group: 'junit', name: 'junit', version: '4.11'
}

buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath 'com.github.ben-manes:gradle-jooq-plugin:+'
        classpath 'mysql:mysql-connector-java:+'
    }
}

jooq {
    jdbc {
        url 'jdbc:mysql://localhost:3306'
        driver 'com.mysql.jdbc.Driver'
        user 'admin'
        passwoed 'xxx'
    }
    generator {
        database {
            name 'org.jooq.util.mysql.MySQLDatabase'
            inputSchema 'test_db'
            includes '.*'
        }
    }
}

我在其中进行数据提取的App.class:

代码语言:javascript
复制
import static org.jooq.generated.Tables.PERSONS;

public class App {

    public static void main(String[] args) {
        try(Connection c = DriverManager.getConnection("jdbc:mysql://localhost:3306/test_db","admin","xxx")){
            DSLContext create = DSL.using(c, SQLDialect.MYSQL);

            for(PersonsRecord personsRecord : create.selectFrom(PERSONS).fetch()) {
                System.out.println(personsRecord
                );
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

编辑:

更新的build.gradle文件用于https://github.com/etiennestuder/gradle-jooq-plugin

代码语言:javascript
复制
apply plugin: 'nu.studer.jooq'

buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath 'nu.studer:gradle-jooq-plugin:+'
        classpath 'mysql:mysql-connector-java:+'
    }
}

repositories {
    jcenter()
}

dependencies {
    compile 'org.jooq:jooq:+'
    compile 'org.jooq:jooq-meta:+'
    compile 'org.jooq:jooq-codegen:+'
    compile 'mysql:mysql-connector-java:+'
    testCompile group: 'junit', name: 'junit', version: '4.11'
}

jooq {
    jdbc {
        url 'jdbc:mysql://localhost:3306'
        driver 'com.mysql.jdbc.Driver'
        user 'admin'
        password 'xxx'
    }
    generator {
        database {
            name 'org.jooq.util.mysql.MySQLDatabase'
            inputSchema 'test_db'
            includes '.*'
        }
        generate {
            daos true
            classes false
        }
    }
}

工作级脚本:

代码语言:javascript
复制
apply plugin: 'nu.studer.jooq'

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'nu.studer:gradle-jooq-plugin:1.0.5'
        classpath 'mysql:mysql-connector-java:+'
    }
}

repositories {
    jcenter()
}

dependencies {
    compile 'org.jooq:jooq:+'
    compile 'mysql:mysql-connector-java:+'
    testCompile group: 'junit', name: 'junit', version: '4.11'
}


jooq {
    sample(sourceSets.main) {
        jdbc {
            driver = 'com.mysql.jdbc.Driver'
            url = 'jdbc:mysql://localhost:3306/test_db'
            user = 'admin'
            password = 'qwerty123'
            schema = 'test_db'
        }
        generator {
            name = 'org.jooq.util.DefaultGenerator'
            strategy {
                name = 'org.jooq.util.DefaultGeneratorStrategy'
            }
            database {
                name = 'org.jooq.util.mysql.MySQLDatabase'
                inputSchema = 'test_db'
            }
            generate {
                daos = true
            }
            target {
                packageName = 'org.homemade.warehouse.db'
                directory = 'src/main/java'
            }
        }
    }
}

多亏了Lukas和Etienne,插件现在真的开始工作了!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-19 15:12:51

在为Gradle插件'nu.studer.jooq‘提供的build.gradle文件中,必须使用等号来分配配置值:

而不是:

代码语言:javascript
复制
jdbc {
    url 'jdbc:mysql://localhost:3306'
    ....
}

它应该是:

代码语言:javascript
复制
jdbc {
    url = 'jdbc:mysql://localhost:3306'
    ....
}

如果您使用插件的最新版本(1.0.5),您必须给您的配置一个名称(因为您可以定义多个配置),并定义将生成的源添加到哪个源集:

代码语言:javascript
复制
jooq {
    sample(sourceSets.main) {
        jdbc {
            ...
        }
    }
}

另见https://github.com/etiennestuder/gradle-jooq-plugin#configuration

如果要强制插件使用特定版本的jOOQ,可以这样做:

代码语言:javascript
复制
buildscript {
    ...

    configurations.classpath {
        resolutionStrategy {
            forcedModules = [
                'org.jooq:jooq:3.4.1',
                'org.jooq:jooq-meta:3.4.1',
                'org.jooq:jooq-codegen:3.4.1'
            ]     
        }
    }
}

另见https://github.com/etiennestuder/gradle-jooq-plugin#custom-jooq-version

票数 7
EN

Stack Overflow用户

发布于 2014-08-18 11:20:13

您所看到的错误消息:

错误:(12,8) java: org.jooq.generated.tables.records.PersonsRecord不是抽象的,不覆盖org.jooq.Record3中的抽象方法值(java.lang.Integer、java.lang.String、java.lang.String)

这实际上是因为将@Override注释放在一个方法上,该方法是从接口实现的,而不是从抽象类实现的。@Override注释的这种使用只能从Java6开始。你也许应该改用

代码语言:javascript
复制
sourceCompatibility = 1.6

另一个jOOQ/Gradle插件,它可能更容易使用和更最新的,也可以找到她:

独立代码生成器

请注意,您不需要使用任何Gradle插件来使用jOOQ的独立代码生成器,它可以提供编程配置,如示例所示:

例如:

代码语言:javascript
复制
// Configure the Java plugin and the dependencies
// ----------------------------------------------
apply plugin: 'java'

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
    compile 'org.jooq:jooq:3.5.0-SNAPSHOT'

    runtime 'com.h2database:h2:1.4.177'
    testCompile 'junit:junit:4.11'
}

buildscript {
    repositories {
        mavenLocal()
        mavenCentral()
    }

    dependencies {
        classpath 'org.jooq:jooq-codegen:3.5.0-SNAPSHOT'
        classpath 'com.h2database:h2:1.4.177'
    }
}


task generate << {

    // Use your favourite XML builder to construct the code generation 
    // configuration file
    // ---------------------------------------------------------------
    def writer = new StringWriter()
    def xml = new groovy.xml.MarkupBuilder(writer)
    .configuration('xmlns': 'http://www.jooq.org/xsd/jooq-codegen-3.4.0.xsd') {
        jdbc() {
            driver('org.h2.Driver')
            url('jdbc:h2:~/test-gradle')
            user('sa')
            password('')
        }
        generator() {
            database() {
            }
            generate() {
            }
            target() {
                packageName('org.jooq.example.gradle.db')
                directory('src/main/java')
            }
        }
    }

    // Run the code generator
    // ----------------------
    org.jooq.util.GenerationTool.main(
        javax.xml.bind.JAXB.unmarshal(
            new StringReader(writer.toString()), 
            org.jooq.util.jaxb.Configuration.class
        )
    )
}

然后运行上面的

代码语言:javascript
复制
gradle generate
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25339115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档