0

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メソッドに渡されます。

4

1 に答える 1