2017-04-19 51 views
0

我已經編寫了一個java類,它使用依賴性jar flyway-core-4.0.3.jar從的taskdef動作類路徑和調用在飛行用罐子的方法,下面是代碼的這是造成問題org.flywaydb.core.api.FlywayException:當我的java類從ant taskdef被觸發時,無法實例化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行動的一部分。我已經爲taskdef操作提供了classpathref。只有當飛路試圖SEACH爲DB的jar(在我的情況我試圖與這兩個使用mysql-connector-java的39年5月1日 - bin.jar和sqljdbc41.jar但同樣的問題時

<taskdef name="ExecuteMigrationScripts" classname="com.install.common.db.action.ExecuteMigrationScripts" 
       classpathref="class.dependencies" loaderref="class.dependencies.loader"/> 
<ExecuteMigrationScripts/> 

問題出現)。

注意:如果我觸發與taskdef操作不同的類,它嘗試連接到數據庫並創建示例數據庫模式,該模式工作正常,可以從taskdef操作中提到的類路徑加載相同的數據庫jar但是這個問題只有在飛路試圖找到數據庫jar時纔會出現。

如果我在這裏失去了一些東西,請幫助我。

回答

0

某些flyway無法獲取jdbc驅動程序的類路徑,即使所有驅動程序jar都在調用taskdef操作時添加到類路徑中。

但是使用命令「ant -lib path_to_the_jdbc_driver_jars」來設置classpath解決了我的問題。

相關問題