Поэтому я действительно пытаюсь делать все «правильно» с SQL, который сломается во время компиляции с использованием flyway и jOOQ. Для этого мне нужно решение для базы данных, которое может работать на сервере непрерывной интеграции без доступа к какой-либо серверной базе данных. . В конечном счете, я хочу развернуть это на Amazon, поэтому мне нужно решение, в основном совместимое с постгресSQL. файловый протокол HSQLDB, кажется, соответствует этим требованиям.
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<properties>
<schema></schema>
<db.groupId>org.hsqldb</db.groupId>
<db.artifactId>hsqldb</db.artifactId>
<db.version>2.3.2</db.version>
<flyway.url>jdbc:hsqldb:file:myDB/db</flyway.url>
<flyway.driver>org.hsqldb.jdbcDriver</flyway.driver>
<jooq.generator.database.name>org.jooq.util.hsqldb.HSQLDBDatabase</jooq.generator.database.name>
<flyway.user></flyway.user>
<flyway.password></flyway.password>
</properties>
<dependencies>
<dependency>
<groupId>${db.groupId}</groupId>
<artifactId>${db.artifactId}</artifactId>
<version>${db.version}</version>
</dependency>
<dependency>
<groupId>org.jooq</groupId>
<artifactId>jooq</artifactId>
<version>3.4.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>3.1</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>migrate</goal>
</goals>
</execution>
</executions>
<configuration>
<locations>
<location>filesystem:src/main/resources/db/migration</location>
</locations>
</configuration>
</plugin>
<plugin>
<!-- Specify the maven code generator plugin -->
<groupId>org.jooq</groupId>
<artifactId>jooq-codegen-maven</artifactId>
<version>3.4.2</version>
<!-- The plugin should hook into the generate goal -->
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<!-- Work around Maven's classloader -->
<dependencies>
<dependency>
<groupId>${db.groupId}</groupId>
<artifactId>${db.artifactId}</artifactId>
<version>${db.version}</version>
</dependency>
</dependencies>
<configuration>
<!-- JDBC connection parameters -->
<jdbc>
<driver>${flyway.driver}</driver>
<url>${flyway.url}</url>
<user>${flyway.user}</user>
<password>${flyway.password}</password>
</jdbc>
<!-- Generator parameters -->
<generator>
<name>org.jooq.util.DefaultGenerator</name>
<database>
<name>${jooq.generator.database.name}</name>
<includes>.*</includes>
<excludes></excludes>
<inputSchema>${schema}</inputSchema>
</database>
<target>
<packageName>package.goes.here</packageName>
<directory>target/generated-sources/jooq</directory>
</target>
</generator>
</configuration>
</plugin>
</plugins>
</build>
The problem is that Flyway can create the database fine, but when it becomes jOOQ's turn to use the database to generate code, it fails with:
Caused by: org.hsqldb.HsqlException: Database lock acquisition failure: lockFile: org.hsqldb.persist.LockFile@1096ec89[file =...db/db.lck, exists=true, locked=false, valid=false, ] method: checkHeartbeat read: 2015-02-09 03:56:15 heartbeat - read: -863 ms.
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.persist.LockFile.newLockFileLock(Unknown Source)
at org.hsqldb.persist.Logger.acquireLock(Unknown Source)
at org.hsqldb.persist.Logger.open(Unknown Source)
at org.hsqldb.Database.reopen(Unknown Source)
at org.hsqldb.Database.open(Unknown Source)
at org.hsqldb.DatabaseManager.getDatabase(Unknown Source)
at org.hsqldb.DatabaseManager.newSession(Unknown Source)
Суть проблемы в том, что плагины Maven не используют тот же загрузчик классов, что и остальные. POM, и вы должны указать зависимость драйвера JDBC во второй раз. Таким образом, я получаю новый экземпляр драйвера, и он конфликтует с уже открытым драйвером, который открыл Flyway, вместо того, чтобы использовать тот же самый.
Таким образом, решение может существовать по нескольким различным путям:
- Flyway может корректно закрыть базу данных. По-видимому, у Flyway есть обходной путь в своем плагине для чтения пути к классам проекта.
- jOOQ можно как-то настроить для чтения пути к классам проекта.
- Возможно, есть другая база данных, которая будет работать лучше.
- Ваш!
sql-maven-plugin
- person Lukas Eder   schedule 14.10.2015