FlywayException: Unable to obtain inputstream for resource: db/migration/V1__sample.sql
モジュール化したプロジェクトでFlywayを使用するとmigrate時にエラーになってしまいました。
モジュール化するとFlywayから「db.migration」が参照できないため、エラーになってしまうようです。
module-info.java に「opens db.migration」を追加して公開するとエラーが解消しました。
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: org.flywaydb.core.api.FlywayException: Unable to obtain inputstream for resource: db/migration/V1__sample.sql
at org.flywaydb.core@6.5.2/org.flywaydb.core.internal.resource.classpath.ClassPathResource.read(ClassPathResource.java:90)
at org.flywaydb.core@6.5.2/org.flywaydb.core.internal.resolver.ChecksumCalculator.calculateChecksumForResource(ChecksumCalculator.java:67)
at org.flywaydb.core@6.5.2/org.flywaydb.core.internal.resolver.ChecksumCalculator.calculate(ChecksumCalculator.java:46)
at org.flywaydb.core@6.5.2/org.flywaydb.core.internal.resolver.sql.SqlMigrationResolver.getChecksumForLoadableResource(SqlMigrationResolver.java:143)
at org.flywaydb.core@6.5.2/org.flywaydb.core.internal.resolver.sql.SqlMigrationResolver.addMigrations(SqlMigrationResolver.java:181)
at org.flywaydb.core@6.5.2/org.flywaydb.core.internal.resolver.sql.SqlMigrationResolver.resolveMigrations(SqlMigrationResolver.java:88)
at org.flywaydb.core@6.5.2/org.flywaydb.core.internal.resolver.sql.SqlMigrationResolver.resolveMigrations(SqlMigrationResolver.java:44)
at org.flywaydb.core@6.5.2/org.flywaydb.core.internal.resolver.CompositeMigrationResolver.collectMigrations(CompositeMigrationResolver.java:127)
at org.flywaydb.core@6.5.2/org.flywaydb.core.internal.resolver.CompositeMigrationResolver.doFindAvailableMigrations(CompositeMigrationResolver.java:109)
at org.flywaydb.core@6.5.2/org.flywaydb.core.internal.resolver.CompositeMigrationResolver.resolveMigrations(CompositeMigrationResolver.java:95)
at org.flywaydb.core@6.5.2/org.flywaydb.core.internal.resolver.CompositeMigrationResolver.resolveMigrations(CompositeMigrationResolver.java:46)
at org.flywaydb.core@6.5.2/org.flywaydb.core.internal.info.MigrationInfoServiceImpl.refresh(MigrationInfoServiceImpl.java:130)
at org.flywaydb.core@6.5.2/org.flywaydb.core.internal.command.DbValidate$2.call(DbValidate.java:142)
at org.flywaydb.core@6.5.2/org.flywaydb.core.internal.command.DbValidate$2.call(DbValidate.java:130)
at org.flywaydb.core@6.5.2/org.flywaydb.core.internal.jdbc.TransactionalExecutionTemplate.execute(TransactionalExecutionTemplate.java:66)
at org.flywaydb.core@6.5.2/org.flywaydb.core.internal.command.DbValidate.validate(DbValidate.java:130)
at org.flywaydb.core@6.5.2/org.flywaydb.core.Flyway.doValidate(Flyway.java:286)
at org.flywaydb.core@6.5.2/org.flywaydb.core.Flyway.access$100(Flyway.java:73)
at org.flywaydb.core@6.5.2/org.flywaydb.core.Flyway$1.execute(Flyway.java:166)
at org.flywaydb.core@6.5.2/org.flywaydb.core.Flyway$1.execute(Flyway.java:158)
at org.flywaydb.core@6.5.2/org.flywaydb.core.Flyway.execute(Flyway.java:527)
at org.flywaydb.core@6.5.2/org.flywaydb.core.Flyway.migrate(Flyway.java:158)
at sample.flyway/sample.flyway.App.main(App.java:38)
... 11 more
Exception running application sample.flyway.App
サンプル実装
sample.flyway.App.java
package sample.flyway;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import org.flywaydb.core.Flyway;
public class App {
private static final String DB_URL = "jdbc:h2:./sample";
public static void main(String[] args) {
//
Flyway flyway = Flyway.configure().dataSource(DB_URL, "sa", "").load();
flyway.migrate();
try (Connection conn = DriverManager.getConnection(DB_URL, "sa", "");
Statement stmt = conn.createStatement();) {
stmt.executeUpdate("DELETE FROM car");
String insertSql = "INSERT INTO car(id, license_plate, color) VALUES "
+ "(1, '沖縄123あ4567', '白'),"
+ "(2, '横浜000あ2468', '赤')";
stmt.executeUpdate(insertSql);
String selectSql = "SELECT * FROM car";
ResultSet rs = stmt.executeQuery(selectSql);
while(rs.next()){
System.out.println("--------------------");
System.out.println("id: " + rs.getInt("id"));
System.out.println("license_plate: " + rs.getString("license_plate"));
System.out.println("color: " + rs.getString("color"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
module-info.java
module sample.flyway {
requires org.flywaydb.core;
requires java.sql;
opens db.migration;
exports sample.flyway;
}
db/migration/V1__sample.sql
CREATE TABLE car(
id INT NOT NULL PRIMARY KEY
, license_plate VARCHAR NOT NULL
, color VARCHAR NOT NULL
);
pom.xml
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>sample</groupId>
<artifactId>sample-flyway</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.197</version>
</dependency>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>6.5.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
</plugins>
</build>
</project>
コメント