当前位置: 首页 > 知识库问答 >
问题:

“运行liquibase意外错误:未知原因”liquibase 3.3.5和grails war文件

云卓
2023-03-14
java -jar /root/liquibase/liquibase.jar \
  --driver=com.mysql.jdbc.Driver \
  --logLevel=debug \
  --changeLogFile=migrations/changelog.xml \
  --classpath=/usr/share/tomcat7/lib/mysql.jar:/var/lib/tomcat7/webapps/myApp.war \
  --url="jdbc:mysql://127.0.0.1:3306/mydb" \
  --username=myuser \
  --password=mypass \
  --contexts=MYCONTEXT \
  update
Unexpected error running Liquibase: Unknown Reason

SEVERE 9/9/15 2:23 PM: liquibase: Unknown Reason
java.lang.AbstractMethodError
        at liquibase.database.DatabaseFactory.register(DatabaseFactory.java:87)
        at liquibase.database.DatabaseFactory.<init>(DatabaseFactory.java:29)
        at liquibase.database.DatabaseFactory.getInstance(DatabaseFactory.java:40)
        at liquibase.integration.commandline.CommandLineUtils.createDatabaseObject(CommandLineUtils.java:50)
        at liquibase.integration.commandline.Main.doMigration(Main.java:884)
        at liquibase.integration.commandline.Main.run(Main.java:175)
        at liquibase.integration.commandline.Main.main(Main.java:94)
ls /root/liquibase/liquibase.jar
ls /usr/share/tomcat7/lib/mysql.jar
ls /var/lib/tomcat7/webapps/revolve.war

全部列出相应的文件。

有什么想法吗?

战争爆发是这样的:

WEB-INF\classes\migrations\
   changelog.xml
   lots_of_other_changes.xml
WEB-INF\classes\migrations\sql
   lots of sql files
      --changeLogFile=WEB-INF/classes/migrations/changelog.xml \
<databaseChangeLog
    :
    <include file="baseline.xml"/>
    <include file="something.xml"/>
<changeSet id="something" author="me">
    <comment>something</comment>
    <sqlFile path="sql//something//new_things.sql" />
</changeSet>
  1. 将grails应用程序内自动更新功能与data-migration 1.4.0插件一起使用是行不通的,因为使用liquibase 2.0.5版本很难编码,它有主要的bug。
  2. 由于不兼容,目前不使用liquibase 3.4+。
  3. 如果在不包括war文件位置的情况下尝试该命令,我会正确地得到一个错误,即无法找到所需的changelog文件,并在db中创建DATABASECHANGELOCK表(因此这一边是ok的)
  4. 无论我更改changeLogFile ot什么,它总是给出这个错误,甚至是完全错误的东西。
  5. 我们不想经历生成diff sql并运行该sql的痛苦。

我怀疑问题与变更集中包含的相对路径有关。

我也试着把所有的

<include file="something.xml"/> 
<include file="something.xml" relativeToChangelogFile="true" />
    <sqlFile path="sql//something//new_things.sql" />
    <sqlFile relativeToChangelogFile="true" path="sql//something//new_things.sql" />

共有1个答案

司徒经纶
2023-03-14

我不知道Grails,但我立即注意到路径中的双斜杠。我希望他们会引起问题。

您可能在考虑是否需要引用Windows样式的反斜杠?在这里可以看到以下内容:C:\\path\\to\\file.dat

但是对于UNIX样式的斜杠(或者正斜杠,如果愿意的话),您不需要这样做。(如果您这样做了,您仍然必须用反斜杠来引用它们,如下所示:\/path\/to\/file.dat--但不要这样做。)

 类似资料: