1

我有一个多微服务项目,一个微服务名为 Foo,在 Foo 服务 pom 下,我添加了一个带有 hibernate 的 liquibase 插件,如下所示:

<plugin>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-maven-plugin</artifactId>
    <version>3.4.1</version>
    <configuration>
        <propertyFile>src/main/resources/liquibase.yaml</propertyFile>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.liquibase.ext</groupId>
            <artifactId>liquibase-hibernate4</artifactId>
            <version>3.6</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.1.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>1.7.3.RELEASE</version>
        </dependency>
    </dependencies>
</plugin>

liquibase.yaml 文件如下所示:

outputChangeLogFile: src/main/resources/liquibase/changelogs/2019/changelog-v1.xml
changeLogFile: src/main/resources/liquibase/changelog-master.xml
url: jdbc:postgresql://localhost:5432/postgres
defaultSchemaName: foo_schema
username: postgres
password: oajmi
driver: org.postgresql.Driver
referenceUrl: hibernate:spring:de.ph.foo.model?dialect=org.hibernate.dialect.PostgreSQLDialects
diffChangeLogFile: src/main/resources/liquibase/changelogs/2019/diff-changelog.xml

执行liquibase generateChangeLog工作正常,但liquibase diff抛出此错误:

[INFO] --- liquibase-maven-plugin:3.4.1:diff (default-cli) @ foo-service ---
[INFO] ------------------------------------------------------------------------
[INFO] Parsing Liquibase Properties File
[INFO]   File: src/main/resources/liquibase.yaml
[INFO]   'outputChangeLogFile' in properties file is not being used by this task.
[INFO] ------------------------------------------------------------------------
[INFO] Executing on Database: jdbc:postgresql://localhost:5432/postgres
INFO 17/11/2019 21:48: liquibase-hibernate: Reading hibernate configuration hibernate:spring:de.ph.foo.model?dialect=org.hibernate.dialect.PostgreSQLDialects
INFO 17/11/2019 21:48: liquibase-hibernate: Found package de.ph.foo.model
INFO 17/11/2019 21:48: liquibase-hibernate: Found dialect org.hibernate.dialect.PostgreSQLDialects
INFO 17/11/2019 21:48: liquibase-hibernate: Found hibernate.enhanced_idfalse
nov. 17, 2019 9:48:43 PM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation
INFO: HHH000204: Processing PersistenceUnitInfo [
    name: default
    ...]
nov. 17, 2019 9:48:43 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.3.11.Final}
nov. 17, 2019 9:48:43 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
nov. 17, 2019 9:48:43 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.650 s
[INFO] Finished at: 2019-11-17T21:48:43+01:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.liquibase:liquibase-maven-plugin:3.4.1:diff (default-cli) on project mortgage-brokerage-service: Error setting up or running Liquibase: org.hibernate.jpa.boot.archive.spi.ArchiveException: Could not build ClassFile -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.liquibase:liquibase-maven-plugin:3.4.1:diff (default-cli) on project mortgage-brokerage-service: Error setting up or running Liquibase: org.hibernate.jpa.boot.archive.spi.ArchiveException: Could not build ClassFile
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:215)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:148)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:305)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:956)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:192)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:347)
Caused by: org.apache.maven.plugin.MojoExecutionException: Error setting up or running Liquibase: org.hibernate.jpa.boot.archive.spi.ArchiveException: Could not build ClassFile
    at org.liquibase.maven.plugins.AbstractLiquibaseMojo.execute(AbstractLiquibaseMojo.java:398)
    at org.liquibase.maven.plugins.LiquibaseDatabaseDiff.execute(LiquibaseDatabaseDiff.java:146)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:210)
    ... 20 more
Caused by: liquibase.exception.DatabaseException: org.hibernate.jpa.boot.archive.spi.ArchiveException: Could not build ClassFile
    at liquibase.integration.commandline.CommandLineUtils.createDatabaseObject(CommandLineUtils.java:143)
    at org.liquibase.maven.plugins.LiquibaseDatabaseDiff.performLiquibaseTask(LiquibaseDatabaseDiff.java:166)
    at org.liquibase.maven.plugins.AbstractLiquibaseMojo.execute(AbstractLiquibaseMojo.java:394)
    ... 23 more
Caused by: org.hibernate.jpa.boot.archive.spi.ArchiveException: Could not build ClassFile
    at org.hibernate.jpa.boot.scan.spi.ClassFileArchiveEntryHandler.toClassFile(ClassFileArchiveEntryHandler.java:88)
    at org.hibernate.jpa.boot.scan.spi.ClassFileArchiveEntryHandler.handleEntry(ClassFileArchiveEntryHandler.java:65)
    at org.hibernate.jpa.boot.archive.internal.JarFileBasedArchiveDescriptor.visitArchive(JarFileBasedArchiveDescriptor.java:176)
    at org.hibernate.jpa.boot.archive.internal.JarProtocolArchiveDescriptor.visitArchive(JarProtocolArchiveDescriptor.java:76)
    at org.hibernate.jpa.boot.scan.spi.AbstractScannerImpl.scan(AbstractScannerImpl.java:72)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.scan(EntityManagerFactoryBuilderImpl.java:725)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:221)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:188)
    at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:45)
    at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:57)
    at liquibase.ext.hibernate.database.HibernateSpringDatabase.buildConfigurationFromScanning(HibernateSpringDatabase.java:243)
    at liquibase.ext.hibernate.database.HibernateSpringDatabase.buildConfiguration(HibernateSpringDatabase.java:55)
    at liquibase.ext.hibernate.database.HibernateDatabase.setConnection(HibernateDatabase.java:46)
    at liquibase.database.DatabaseFactory.findCorrectDatabaseImplementation(DatabaseFactory.java:131)
    at liquibase.database.DatabaseFactory.openDatabase(DatabaseFactory.java:151)
    at liquibase.integration.commandline.CommandLineUtils.createDatabaseObject(CommandLineUtils.java:85)
    ... 25 more

我有一种预感,它是一个包问题,但它的包名称是正确的,所以这里有什么问题?谁能帮帮我?

4

1 回答 1

0

插件和依赖项也有较新的版本。试试这个(我没有)

<plugin>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-maven-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <propertyFile>src/main/resources/liquibase.yaml</propertyFile>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.liquibase.ext</groupId>
            <artifactId>liquibase-hibernate5</artifactId> <!-- Pay attention to the artifactId has also changed -->
            <version>3.8</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.2.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>
    </dependencies>
</plugin>

更新

  1. 我需要了解有关该项目的更多信息,例如,如果需要 maven 插件方式,您是否使用 Spring Boot。
  2. AFAIK Liquibase Maven 插件不需要 Spring 依赖项。
  3. Spring 具有内置的 liquibase 支持。如果你使用 Spring 推荐这种方式。
于 2019-11-17T22:01:37.670 回答