2017-04-19 8 views
0

로드 된 종속성 jar flyway-core-4.0.3.jar를 사용하는 Java 클래스를 작성했습니다. taskdef 액션 클래스 경로와 이동 경로 항아리의 메소드를 호출하는 다음 내가 개미 사용하여 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 조치에 대한 classpathref를주었습니다. 이동 경로는 (내 경우에는 내가 모두 MySQL의 커넥터 - 자바-5.1.39-bin.jar를하고 sqljdbc41.jar하지만 같은 문제를 시도 DB를 항아리에 대한 seach하려고 할 때

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

문제가 발생합니다 발생).

참고 : 데이터베이스에 연결하고 샘플 데이터베이스 스키마를 만드는 taskdef 작업에서 다른 클래스를 트리거하면 정상적으로 작동하고 taskdef 작업에 언급 된 클래스 경로에서 동일한 db jar를로드 할 수 있습니다 그러나 flyway가 db 단지를 찾으려고 할 때만 문제가 발생합니다.

여기에 뭔가 빠진 경우 도와주세요.

답변

0

taskdef 조치를 호출하는 동안 모든 드라이버 jar가 클래스 경로에 추가 되더라도 flyway가 jdbc 드라이버의 클래스 경로를 확보하지 못하는 이유는 다음과 같습니다.

"ant -lib path_to_the_jdbc_driver_jars"명령을 사용하여 classpath를 설정하면 내 문제가 해결됩니다.