Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 结合SQLMaven插件和jOOQ使用HSQLDB_Java_Sql_Maven_Hsqldb_Jooq - Fatal编程技术网

Java 结合SQLMaven插件和jOOQ使用HSQLDB

Java 结合SQLMaven插件和jOOQ使用HSQLDB,java,sql,maven,hsqldb,jooq,Java,Sql,Maven,Hsqldb,Jooq,这是一个类似的问题,尽管与我们使用的sqlmaven插件,而不是Flyway不完全相同 以下Maven插件配置失败: SQLMaven插件 org.codehaus.mojo SQLMaven插件 1.5 创建数据库 生成源 执行 ${db.driver} ${db.url} ${db.username} ${db.password} src/main/resources/sql/create-db.sql org.hsqldb hsqldb ${hsqldb.version} jooq c

这是一个类似的问题,尽管与我们使用的
sqlmaven插件
,而不是Flyway不完全相同

以下Maven插件配置失败:

SQLMaven插件

org.codehaus.mojo
SQLMaven插件
1.5
创建数据库
生成源
执行
${db.driver}
${db.url}
${db.username}
${db.password}
src/main/resources/sql/create-db.sql
org.hsqldb
hsqldb
${hsqldb.version}
jooq codegen maven

org.jooq
jooq codegen maven
${jooq.version}
生成hsqldb
生成源
生成
${db.driver}
${db.url}
${db.username}
${db.password}
公开的
com.example.db
目标/生成源/jooq hsqldb
错误是:
java.sql.SQLException:数据库锁获取失败:lockFile:org.hsqldb.persist。LockFile@cc76d81d[file=C:\Users\Lukas\example.db.lck,exists=true,locked=false,valid=false,]方法:检查心跳读取:2015-10-14 10:49:15心跳读取:-9975毫秒。
位于org.hsqldb.jdbc.jdbcuti.sqlException(未知源)
位于org.hsqldb.jdbc.jdbcuti.sqlException(未知源)
位于org.hsqldb.jdbc.JDBCConnection。(来源未知)
位于org.hsqldb.jdbc.JDBCDriver.getConnection(未知源)
位于org.hsqldb.jdbc.JDBCDriver.connect(未知源)
位于org.jooq.util.GenerationTool.run(GenerationTool.java:208)
位于org.jooq.util.GenerationTool.generate(GenerationTool.java:180)
位于org.jooq.util.maven.Plugin.execute(Plugin.java:131)
位于org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:132)
位于org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
位于org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
位于org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
位于org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
位于org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
位于org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
位于org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:120)
在org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:347)
位于org.apache.maven.DefaultMaven.execute(DefaultMaven.java:154)
位于org.apache.maven.cli.MavenCli.execute(MavenCli.java:582)
位于org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)
位于org.apache.maven.cli.MavenCli.main(MavenCli.java:158)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:497)
位于org.codehaus.plexus.classworlds.launcher.launcher.launchEnhanced(launcher.java:289)
位于org.codehaus.plexus.classworlds.launcher.launcher.launch(launcher.java:229)
位于org.codehaus.plexus.classworlds.launcher.launcher.mainWithExitCode(launcher.java:415)
位于org.codehaus.plexus.classworlds.launcher.launcher.main(launcher.java:356)
如何解决这个问题?

,HSQLDB在类加载器的基础上锁定数据库有一个问题。此处涉及的两个maven插件不共享相同的类加载器,因此第二个插件无法访问由第一个类加载器嵌入的数据库,除非:

  • 立即关机
    在第一个脚本中被调用(但这有点难看,因为在其他上下文中也可能需要该脚本)
  • JVM被关闭(但在Maven的上下文中这是非常难看的)
解决方法是指定第二次执行
sql maven插件
,该插件显式调用
立即关闭
命令:


创建数据库
生成源
...
关闭数据库
生成源
执行
${db.driver}
${db.url}
${db.username}
${db.password}
立即关闭