jarに含まれるファイルでH2を初期化するには?
現在、この例外が発生しています:
testCase(CheckTest): org.h2.jdbc.JdbcSQLException: IO 例外: "java.io.FileNotFoundException: /Users/user1/.m2/repository/a/3.10-SNAPSHOT/a-SNAPSHOT-tests.jar!/h2_db. sql (そのようなファイルまたはディレクトリはありません)"; "file:/Users/user1/.m2/repository/a/3.10-SNAPSHOT/a-3.10-SNAPSHOT-tests.jar!/h2_db.sql"; SQL文:(..)
( ) でデータベースを初期化したいファイルh2_db.sql
は jar ファイル内にありますa-3.10-SNAPSHOT-tests.jar
コードは次のようになります
initSqlFile = getInitSqlFile();
//initSqlFile = "/Users/user1/.m2/repository/a/3.10-SNAPSHOT/a-SNAPSHOT-tests.jar!/h2_db.sql"
//initSqlFile is a file contained ina jar, note the "!"
url = String.format(
"jdbc:h2:mem:%s;MODE=PostgreSQL;LOCK_TIMEOUT=500;ifexists=true;INIT=runscript from '%s';DB_CLOSE_DELAY=-1;MVCC=TRUE",
testSuitName, initSqlFile);
// later ...
con = DriverManager.getConnection(url, user, passwd);
この問題は比較的簡単に回避できますが、H2 が jar ファイル内のファイルからの初期化をサポートしているかどうか疑問に思っています。
または、一時ファイルを意味しないエレガントな回避策かもしれません。
追加情報: リソースを検索するメソッドがあります。リソースがクラスパスで見つかった場合、メソッドはリソースのパスを返します。次に、リソースのパス ( ) がパラメーターとして、データベースを初期化する/Users/user1/.m2/repository/a/3.10-SNAPSHOT/a-SNAPSHOT-tests.jar!/h2_db.sql
メソッドに渡されます。