【问题标题】:Flyway 'migrate' ant task error: "Unable to find path for sql migrations [...]"Flyway '迁移' ant 任务错误:“无法找到 sql 迁移的路径 [...]”
【发布时间】:2012-03-04 19:41:37
【问题描述】:

我无法指定带有 .sql 文件的目录的正确路径。我试图将“baseDir”属性设置为不同位置的不同目录(当然是在类路径中)并设置不同的类路径。构建脚本总是带有消息“无法找到 sql 迁移的路径:[uri to directory with . sql 文件]”。

它不像similar question 中所说的issue 156,当然如果我删除SqlMigrationResolver.java 中的代码

if (StringUtils.hasText(baseDir) && !new ClassPathResource(baseDir + "/",
    classLoader).exists()) {
  LOG.warn("Unable to find path for sql migrations: " + baseDir);
  return migrations;
}

正如Comment #9 中所说的,我仍然抓到了

deployDB:
[flyway:migrate] com.googlecode.flyway.core.exception.FlywayException: Error loading sql migration files
[flyway:migrate] Caused by java.io.FileNotFoundException: class path resource [db/migration/] cannot be resolved to URL because it does not exist

BUILD FAILED
c:\DeployTest\build.xml:208: Flyway Error: com.googlecode.flyway.core.exception.FlywayException: Error loading sql migration files

Flyway 落在

resources = new PathMatchingResourcePatternResolver(classLoader)
        .getResources("classpath:" + searchRoot + searchPattern);

无法执行getResources方法。

看起来不像是错误,看起来我无法使用我的 SQL 脚本为目录设置正确的 uri =(

请帮我设置这个该死的 uri!

我的 build.xml:

<target name="init-flyway">
  <taskdef uri="antlib:com.googlecode.flyway.ant"
           resource="com/googlecode/flyway/ant/antlib.xml"
  />
  <property name="flyway.driver" value="${dbDriver}"/>
  <property name="flyway.url" value="${dbUrl}"/>
  <property name="flyway.user" value="${dbScheme}"/>
  <property name="flyway.password" value="${dbPass}"/>
  <property name="flyway.baseDir" value="\db\migration"/>
  <property name="flyway.classpath" value="c:\DeployTest"/>
</target>

<target name="deployDB" depends="init-flyway">
  <flyway:migrate/>
</target>

【问题讨论】:

  • 为了确定起见,请尝试将您的 '\' 替换为 '/'。
  • @nico_ekito 是的,我已经尝试过这样做。它没有给出任何结果。
  • 你试过“/db/migration”(从错误信息看,第一个“/”不见了)?
  • @nico_ekito 我了解谁,没关系,我们使用什么样的分隔符。我试过 "/db/migration""\db\migration""db/migration""db\migration "。错误消息始终是 [db/migration/]
  • “\db\migration”文件夹是否是您资源的一部分(即在类路径中)?

标签: java ant classpath flyway


【解决方案1】:

尝试将 flyway.classpathproperty 更改为 path

对于你的情况,这意味着改变这个:

<property name="flyway.classpath" value="c:\DeployTest"/>

到这里:

<path id="flyway.classpath">
    <fileset dir="c:\DeployTest"/>
</path>

【讨论】:

  • 此解决方案不适用于我的情况。我收到太多异常,例如 无法从 {some file} 获取资源:java.util.zip.ZipException:打开 zip 文件时出错 [flyway:migrate] Unable to get resource from {some file}: [flyway: migrate] java.util.zip.ZipException: error in opening zip file 我的目录中的所有文件都出现这些异常。
  • 正如我之前所说,将类路径设置为迁移任务的属性对我有帮助()。
  • 谢谢,这解决了我的问题。虽然我使用的是 Maven 插件,所以在 flyway 的配置元素中添加以下内容就可以了:&lt;classpath&gt;${basedir}&lt;/classpath&gt;
【解决方案2】:

而不是这个:

<path id="flyway.classpath"> 
    <fileset dir="c:\DeployTest"/> 
</path>

用途:

<path id="flyway.classpath">  
      <pathelement location="c:\DeployTest"/>
</path>  

【讨论】:

    猜你喜欢
    • 2012-02-07
    • 2020-04-29
    • 2012-11-10
    • 1970-01-01
    • 2015-08-19
    • 2020-03-08
    • 1970-01-01
    • 2021-02-07
    • 2019-12-27
    相关资源
    最近更新 更多