Liquibase Hibernate Java 8 支持

Liquibase Hibernate Java 8 support

我希望以前有人遇到过同样的问题,在这里问比试错更快。

我有一个 Java 8 项目,我在其中尝试使用 Liquibase,并从我的实体生成我的变更日志:

liquibase --changeLogFile=changeLog.yaml 
          --url=hibernate:spring:com.example.domain?dialect=org.hibernate.dialect.MySQL5InnoDBDialect 
          --logLevel=debug generateChangeLog

我收到以下错误:

SEVERE 11/04/15 09:55: liquibase: Failed to scan classpath for unlisted classes
liquibase.exception.DatabaseException: javax.persistence.PersistenceException: Failed to scan classpath for unlisted classes
...
Caused by: org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file - probably due to a new Java class file version that isn't supported yet: file [.../Example.class]; ...

我使用 Java 7 编译了我的项目,liquibase 工作正常。

Liquibase 版本:3.3.2
Liquibase Hibernate4.2 版本:3.5

由于 liquibase 是开源的,我可以尝试使用 Java 8 重建它,但我不知道它是否有帮助。

异常表明问题出在 Spring 的 class reader 中,您使用的是最新的 Spring 版本吗?最近的 spring 适用于所有 Java 6-8,因此升级 Spring.

应该不会有问题

还有,你的运行时间也是Java8吗?您可能安装了多个 JVM,例如 运行time 是 7 但您使用 JDK8,您可以使用 Java8 构建您的项目,但当然它不会 运行 Java7 环境。

我终于想通了,虽然不是那么容易。

正如 Zielu 指出的那样,问题出在 Spring 版本上。虽然不在我自己的项目中,但在 liquibase-hibernate 中。

所以解决方案是:

  1. github
  2. 下载 liquibase-hibernate 源
  3. 更新休眠和 spring 依赖项
  4. 构建 liquibase-hibernate jar
  5. 将这个新构建的 jar 复制到 liquibase CLI lib 文件夹
  6. 在 liquibase CLI lib 文件夹中,更新 spring 和休眠库

运行 liquibase 如上。