如何为单个数据库配置带有Gradle和Mysql的jooq

时间:2017-03-24 18:09:10

标签: mysql gradle jooq

我尝试使用jooq从gradle自动加载配置,但很难按照指南进行操作。

我终于让它加载了数据,但到目前为止我只能使所有数据库工作(使database()块空白)。

下面的代码我尝试只加载一个数据库。

buildscript {

   repositories {
     mavenCentral()
     maven {
       name 'JFrog OSS snapshot repo'
       url  'https://oss.jfrog.org/oss-snapshot-local/'
     }
     jcenter()
   }

   dependencies {
       classpath 'org.jooq:jooq-codegen:3.9.1'
       classpath group: 'mysql', name: 'mysql-connector-java', version: '6.0.6'
   }
}

apply plugin: 'application'
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'antlr'

repositories {
    mavenLocal()
    mavenCentral()
    jcenter()
}

dependencies {
    //compile group: 'com.github.javaparser', name: 'javaparser-core', version: '3.0.0-alpha.2'
    compile group: 'com.github.javaparser', name: 'java-symbol-solver-core', version: '0.5.2'
    compile 'org.jooq:jooq:3.9.1'
    runtime group: 'mysql', name: 'mysql-connector-java', version: '6.0.6'
    testCompile "junit:junit:latest.release"
}

idea {
    module {
        excludeDirs += file('src/main/resources')
    }
}

// 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.9.0.xsd') {
    jdbc() {
        driver('com.mysql.cj.jdbc.Driver')
        url('jdbc:mysql://127.0.0.1/graphUpgrade?serverTimezone=UTC')
        user('parseUser')
        password('password')
    }
    generator() {
        database() {
            name('org.jooq.util.mysql.MySQLDatabase')
            inputSchema('graphUpgrade')
            includes('.*')
        }

        // Watch out for this caveat when using MarkupBuilder with "reserved names"
        // - https://github.com/jOOQ/jOOQ/issues/4797
        // - http://stackoverflow.com/a/11389034/521799
        // - https://groups.google.com/forum/#!topic/jooq-user/wi4S9rRxk4A
        generate([:]) {
            pojos true
            daos true
        }
        target() {
            packageName('us.klingman.codeParser.db')
            directory('src/main/java')
        }
    }
}
print writer.toString()
// Run the code generator
// ----------------------
org.jooq.util.GenerationTool.generate(
        javax.xml.bind.JAXB.unmarshal(new StringReader(writer.toString()), org.jooq.util.jaxb.Configuration.class)
)

运行此代码会产生以下错误:

Error while fetching tables
java.lang.NullPointerException
    at org.jooq.util.AbstractElementContainerDefinition.<init>(AbstractElementContainerDefinition.java:79)
    at org.jooq.util.AbstractElementContainerDefinition.<init>(AbstractElementContainerDefinition.java:75)
    at org.jooq.util.AbstractTableDefinition.<init>(AbstractTableDefinition.java:68)
    at org.jooq.util.mysql.MySQLTableDefinition.<init>(MySQLTableDefinition.java:70)
    at org.jooq.util.mysql.MySQLDatabase.getTables0(MySQLDatabase.java:256)
    at org.jooq.util.AbstractDatabase.getTables(AbstractDatabase.java:1137)
    at org.jooq.util.AbstractDatabase.getTable(AbstractDatabase.java:1163)
    at org.jooq.util.AbstractDatabase.getTable(AbstractDatabase.java:1158)
    at org.jooq.util.mysql.MySQLDatabase.getEnums0(MySQLDatabase.java:295)
    at org.jooq.util.AbstractDatabase.getEnums(AbstractDatabase.java:1182)
    at org.jooq.util.JavaGenerator.generateSchemaIfEmpty(JavaGenerator.java:334)
    at org.jooq.util.JavaGenerator.generateCatalogIfEmpty(JavaGenerator.java:323)
    at org.jooq.util.JavaGenerator.generate(JavaGenerator.java:297)
    at org.jooq.util.GenerationTool.run(GenerationTool.java:610)
    at org.jooq.util.GenerationTool.generate(GenerationTool.java:199)
    at org.jooq.util.GenerationTool$generate.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
    at build_87hklhc6v691dvh83y5ogqnvl.run(/Users/lorenklingman/Sites/code-search-parser/build.gradle:79)
    at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:74)

最后,为了完整性,这里是为所有数据库生成的文件。

Screenshot of Generated Files

1 个答案:

答案 0 :(得分:1)

我相信你在这里遇到了这个问题:#5213

请务必在jOOQ配置中始终使用完全大写/小写写入数据库名称。此外,MySQL和MariaDB中有一些区分大小写的注意事项,具体取决于操作系统。这些警告可以影响除jOOQ之外的其他工具。相关信息也在#5213