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

gradle项目中最新JOOQ库的JOOQ插件,gradle,jooq,Gradle,Jooq,在我的JavaGradle项目中,我在查找一个工作的JOOQ插件或为最新的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/

在我的JavaGradle项目中,我在查找一个工作的JOOQ插件或为最新的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/
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
这仅适用于JOOQ 3.2.2(最新的3.4.2不起作用)。如果我将其设置为3.4.2,jooqGenerate会成功执行,但数据获取会调用错误消息:

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/
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
我做错了什么

这是我的毕业设计

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:

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();
        }
    }
}
编辑:

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'
            }
        }
    }
}
更新的build.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'
            }
        }
    }
}

感谢Lukas Eder和Etienne Studer,插件现在真的可以工作了

您看到的错误消息:

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

这实际上是由于将
@Override
注释放在从接口而不是从抽象类实现的方法上。
@Override
注释的这种用法仅在Java6之后才可用。你可能应该改用

sourceCompatibility = 1.6
您还可以找到另一个jOOQ/Gradle插件,该插件可能更易于使用且更为最新:

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

例如:

//配置Java插件和依赖项
// ----------------------------------------------
应用插件:“java”
存储库{
mavenLocal()
mavenCentral()
}
依赖关系{
编译“org.jooq:jooq:3.5.0-SNAPSHOT”
运行时'com.h2数据库:h2:1.4.177'
testCompile'junit:junit:4.11'
}
构建脚本{
存储库{
mavenLocal()
mavenCentral()
}
依赖关系{
类路径“org.jooq:jooq代码根:3.5.0-SNAPSHOT”
类路径'com.h2数据库:h2:1.4.177'
}
}

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

而不是:

jdbc {
    url 'jdbc:mysql://localhost:3306'
    ....
}
应该是:

jdbc {
    url = 'jdbc:mysql://localhost:3306'
    ....
}
如果使用最新版本的插件(1.0.5),则必须为配置命名(因为您可以定义多个配置),并定义将生成的源添加到哪个源集中:

jooq {
    sample(sourceSets.main) {
        jdbc {
            ...
        }
    }
}
另见

如果您想强制该插件使用特定版本的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'
            ]     
        }
    }
}

另请参见

能否在GitHub上准备一个最简单的工作示例?将SourceCompability版本设置为1.6或更高版本对ben manes插件没有帮助。我正在尝试使用你的替代方法,我已经尝试了几天,但仍然有我所要求的插件配置问题(我已经更新了这个替代插件的build.gradle文件)。你能给我一些提示为什么gradle不理解jdbc(mysql服务器启动了,库由gradle下载并添加到项目中)?嗯,很遗憾,我不知道。但我们目前正在使用jOOQ的独立代码生成器编写一个小的Gradle教程。这将消除对第三方插件的需求,并且可以得到数据极客的完全支持。我会更新我的答案一点…再次感谢,它帮助了我。现在我可以用latsj jooq版本生成我想要的任何东西。一句简短的评论-没有这样的代码版本“xmlns”:“。最新版本是3.4。我只有一个问题,因为我看到每次运行这个脚本时都会执行代码生成。它可以是干净的任务,也可以是其他任何任务,我怎样才能单独执行代码生成?否则它看起来有点奇怪而且不干净-build.gradle脚本中的某种代码。我怎样才能使我的脚本更漂亮、更干净?@user1376885:我想,只要把这一部分放在一个任务中就行了。。。?对不起,我自己也不是一个格拉德尔专家,所以我选择了一条阻力最小的道路。也许有经验的人能给你一个更好的答案…谢谢,这真的很有效。我的问题是在错误的配置中,漫不经心=)@user1376885:这表明,有时,人们应该坐下来研究实际问题,而不是选择阻力最小的路径(如我的答案所示);-)