在我的java gradle项目中,在为最新的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/这只适用于JOOQ3.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我做错了什么?
这是我的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 '.*'
}
}
}我在其中进行数据提取的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();
}
}
}编辑:
更新的build.gradle文件用于https://github.com/etiennestuder/gradle-jooq-plugin
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
}
}
}工作级脚本:
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,插件现在真的开始工作了!
发布于 2014-08-19 15:12:51
在为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 {
...
}
}
}另见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'
]
}
}
}另见https://github.com/etiennestuder/gradle-jooq-plugin#custom-jooq-version
发布于 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开始。你也许应该改用
sourceCompatibility = 1.6另一个jOOQ/Gradle插件,它可能更容易使用和更最新的,也可以找到她:
独立代码生成器
请注意,您不需要使用任何Gradle插件来使用jOOQ的独立代码生成器,它可以提供编程配置,如示例所示:
例如:
// 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
)
)
}然后运行上面的
gradle generatehttps://stackoverflow.com/questions/25339115
复制相似问题