2017-04-19 5 views
0

依存関係jar flyway-core-4.0.3.jarを使用してJavaクラスを作成しました。 taskdefアクションクラスパスとフライウェイジャー内のメソッドを呼び出す、次は私がのtaskdefアクションを使用してアリを持つクラスをトリガーしています発行しorg.flywaydb.core.api.FlywayException:Javaクラスがantタスク定義からトリガーされたときにJDBCドライバーをインスタンス化できません

public static boolean executeFlywayMigrate(String connectionUrl, String username, String password, 
     String scriptLocation, String[] databaseNames, Map<String, String> componentProperties, 
     boolean validateOnMigrate) 
     throws SQLException { 
    LOGGER.info("Database schemas for migration are :" + Arrays.toString(databaseNames)); 
    try { 
     Flyway flyway = new Flyway(); 
     flyway.setLocations(scriptLocation); 
     flyway.setSchemas(databaseNames); 
     flyway.setBaselineOnMigrate(true); 
     flyway.setDataSource(connectionUrl, username, password); 
     if (componentProperties != null) { 
      flyway.setPlaceholders(componentProperties); 
     } 
     flyway.setValidateOnMigrate(validateOnMigrate); 
     flyway.repair(); 
     flyway.migrate(); 
    } catch (RuntimeException e) { 
     LOGGER.error("Database migration failed.", e); 
     throw new SQLException(e); 
    } 

を引き起こしているコードの一部です。私はtaskdefアクションのclasspathrefを与えました。

フライウェイは、(私の場合は、MySQL-コネクタのjava-5.1.39-bin.jarをしてsqljdbc41.jarが、同じ問題の両方を試してみましたデシベルジャーのためのWiki検索しようとしたときにのみ問題が発生
<taskdef name="ExecuteMigrationScripts" classname="com.install.common.db.action.ExecuteMigrationScripts" 
       classpathref="class.dependencies" loaderref="class.dependencies.loader"/> 
<ExecuteMigrationScripts/> 

発生する)。

注:データベースに接続してサンプルデータベーススキーマを作成しようとするtaskdefアクションから別のクラスをトリガーすると、正常に動作し、taskdefアクションに記述されているクラスパスから同じdb jarをロードできますこの問題は、フライウェイがdb jarの位置を特定しようとしている場合にのみ発生します。

ここに何か不足している場合は私を助けてください。

答えて

0

taskdefアクションを呼び出すときに、すべてのドライバjarがクラスパスに追加されても、flywayがjdbcドライバのクラスパスを取得できないことがあります。

"ant -lib path_to_the_jdbc_driver_jars"コマンドを使用してクラスパスを設定すると、私の問題が解決しました。

関連する問題