用于gradle项目中最新JOOQ库的JOOQ插件

Vik*_* V. 6 gradle jooq

我在找到一个有效的JOOQ插件或者在我的java gradle项目中配​​置最新的JOOQ库时遇到了问题.

我找到了以下插件:

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

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/
Run Code Online (Sandbox Code Playgroud)

这仅适用于JOOQ 3.2.2(最新的3.4.2不起作用).如果我将其设置为3.4.2,则jooqGenerate成功执行但数据提取会调用错误消息:

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
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

那是我的gradle.build:

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 '.*'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我在做数据获取的App.class:

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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

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

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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

工作gradle脚本:

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'
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

感谢Lukas Eder和Etienne Studer,插件现在正在运行!

小智 7

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

代替:

jdbc {
    url 'jdbc:mysql://localhost:3306'
    ....
}
Run Code Online (Sandbox Code Playgroud)

它应该是:

jdbc {
    url = 'jdbc:mysql://localhost:3306'
    ....
}
Run Code Online (Sandbox Code Playgroud)

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

jooq {
    sample(sourceSets.main) {
        jdbc {
            ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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'
            ]     
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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