org.flywaydb.core.api.FlywayException:当我的java类从ant taskdef触发时,无法实例化JDBC驱动程序

org.flywaydb.core.api.FlywayException:当我的java类从ant taskdef触发时,无法实例化JDBC驱动程序,java,sql-server,jdbc,ant,flyway,Java,Sql Server,Jdbc,Ant,Flyway,我编写了一个java类,它使用从taskdef操作类路径加载的依赖项jar flyway-core-4.0.3.jar并调用flyway jar中的方法,下面是导致问题的代码部分 public static boolean executeFlywayMigrate(String connectionUrl, String username, String password, String scriptLocation, String[] databaseNames, Map

我编写了一个java类,它使用从taskdef操作类路径加载的依赖项jar flyway-core-4.0.3.jar并调用flyway jar中的方法,下面是导致问题的代码部分

   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);
    }
public static boolean executeFlywayMigrate(字符串连接URL、字符串用户名、字符串密码、,
字符串scriptLocation、字符串[]数据库名称、映射组件属性、,
布尔验证(迁移)
抛出SQLException{
info(“用于迁移的数据库模式是:”+Arrays.toString(databaseNames));
试一试{
Flyway Flyway=新Flyway();
飞行路线。设置位置(脚本位置);
flyway.setSchemas(数据库名称);
飞行路线。后退路线移动(真);
setDataSource(connectionUrl、用户名、密码);
if(组件属性!=null){
设置占位符(组件属性);
}
setValidateOnMigrate(validateOnMigrate);
修理;
flyway.migrate();
}捕获(运行时异常e){
LOGGER.error(“数据库迁移失败”,e);
抛出新的SQLException(e);
}
我正在使用taskdef操作用ant触发类。我已经为taskdef操作提供了classpathref

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

只有在flyway尝试搜索db jar时才会出现问题(在我的例子中,我尝试了mysql-connector-java-5.1.39-bin.jar和sqljdbc41.jar,但出现了相同的问题)

注意:如果我从taskdef操作中触发一个不同的类,该类尝试连接到数据库并创建一个示例数据库架构,则该类工作正常,并且可以从taskdef操作中提到的类路径加载相同的db jar,但问题仅在flyway尝试定位db jar时发生


如果我在这里遗漏了什么,请帮助我。

了解flyway如何在调用taskdef操作时,即使在类路径中添加了所有驱动程序JAR,也无法获取jdbc驱动程序的类路径

<taskdef name="ExecuteMigrationScripts" classname="com.install.common.db.action.ExecuteMigrationScripts" 
                classpathref="class.dependencies" loaderref="class.dependencies.loader"/>
<ExecuteMigrationScripts/> 
然而,使用命令“ant-lib path\u to\u-jdbc\u-driver\u-jars”设置类路径解决了我的问题