2015-09-24 149 views
1

我们在我们的项目中使用了spring引导和hibernate。我决定使用liquibase进行数据库迁移。当我尝试运行mvn liquibase:diff以便在JPA实体和现有数据库之间产生差异时,我遇到了NullPointerException尝试运行liquibase时出现NullPointerException diff

liquibase.properties:

changeLogFile=classpath:liquibase-changeLog.xml 
    url=jdbc:oracle:thin:@localhost:1521:orcl 
    username=xxxxxxx 
    password=xxxxxxx 
    driver=oracle.jdbc.OracleDriver 
    referenceUrl=hibernate:spring:xxxxx.xxxxxxxxx.businesslogic.db.entity?dialect=org.hibernate.dialect.Oracle10gDialect 
    diffChangeLogFile=src/main/resources/liquibase-diff-changeLog.xml 
    outputChangeLogFile=src/main/resources/liquibase-outputChangeLog.xml 

聚甲醛是:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.liquibase</groupId> 
      <artifactId>liquibase-maven-plugin</artifactId> 
      <version>3.4.1</version> 
      <configuration> 
       <propertyFile>src/main/resources/liquibase.properties</propertyFile> 
      </configuration> 
      <dependencies> 
       <dependency> 
        <groupId>org.liquibase.ext</groupId> 
        <artifactId>liquibase-hibernate4</artifactId> 
        <version>3.5</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> 
    </plugins> 
</build> 

,结果我得到:

... 
INFO 9/23/15 8:34 PM: liquibase-hibernate: Found column allowNonWhole varchar2(2 
55 CHAR) 
INFO 9/23/15 8:34 PM: liquibase-hibernate: Found column category varchar2(255 CH 
AR) 
INFO 9/23/15 8:34 PM: liquibase-hibernate: Found column description varchar2(255 
CHAR) 
INFO 9/23/15 8:34 PM: liquibase-hibernate: Found column name varchar2(255 CHAR) 
INFO 9/23/15 8:34 PM: liquibase-hibernate: Found table CatalogItem 
INFO 9/23/15 8:34 PM: liquibase-hibernate: Found primary key CatalogItemPK 
INFO 9/23/15 8:34 PM: liquibase-hibernate: Found column itemId varchar2(255 CHAR 
) 
INFO 9/23/15 8:34 PM: liquibase-hibernate: Found column created timestamp 
INFO 9/23/15 8:34 PM: liquibase-hibernate: Found column updated timestamp 
INFO 9/23/15 8:34 PM: liquibase-hibernate: Found column isActive number(1, 0) 
INFO 9/23/15 8:34 PM: liquibase-hibernate: Found column itemDetails clob 
INFO 9/23/15 8:34 PM: liquibase-hibernate: Found column catalog_id number(19, 0) 

INFO 9/23/15 8:34 PM: liquibase: Can not use class liquibase.serializer.core.jso 
n.JsonChangeLogSerializer as a Liquibase service because org.yaml.snakeyaml.repr 
esenter.Representer is not in the classpath 
INFO 9/23/15 8:34 PM: liquibase: Can not use class liquibase.serializer.core.yam 
l.YamlChangeLogSerializer as a Liquibase service because org.yaml.snakeyaml.repr 
esenter.Representer is not in the classpath 
INFO 9/23/15 8:34 PM: liquibase: src\main\resources\liquibase-diff-changeLog.xml 
exists, appending 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 4.257 s 
[INFO] Finished at: 2015-09-23T20:34:45-07:00 
[INFO] Final Memory: 37M/315M 
[INFO] ------------------------------------------------------------------------ 
[ERROR] Failed to execute goal org.liquibase:liquibase-maven-plugin:3.4.1:diff (
default-cli) on project businesslogic: Error setting up or running Liquibase: li 
quibase.command.CommandExecutionException: java.lang.NullPointerException -> [He 
lp 1] 
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal o 
rg.liquibase:liquibase-maven-plugin:3.4.1:diff (default-cli) on project business 
logic: Error setting up or running Liquibase: liquibase.command.CommandExecution 
Exception: java.lang.NullPointerException 
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor 
.java:216) 
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor 
.java:153) 
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor 
.java:145) 
     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje 
ct(LifecycleModuleBuilder.java:116) 
     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje 
ct(LifecycleModuleBuilder.java:80) 
     at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThre 
adedBuilder.build(SingleThreadedBuilder.java:51) 
     at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(Lifecycl 
eStarter.java:120) 
     at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:355) 
     at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:155) 
     at org.apache.maven.cli.MavenCli.execute(MavenCli.java:584) 
     at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:216) 
     at org.apache.maven.cli.MavenCli.main(MavenCli.java:160) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. 
java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces 
sorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:606) 
     at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Laun 
cher.java:289) 
     at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.jav 
a:229) 
     at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(La 
uncher.java:415) 
     at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java: 
356) 
Caused by: org.apache.maven.plugin.MojoExecutionException: Error setting up or r 
unning Liquibase: liquibase.command.CommandExecutionException: java.lang.NullPoi 
nterException 
     at org.liquibase.maven.plugins.AbstractLiquibaseMojo.execute(AbstractLiq 
uibaseMojo.java:398) 
     at org.liquibase.maven.plugins.LiquibaseDatabaseDiff.execute(LiquibaseDa 
tabaseDiff.java:146) 
     at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(Default 
BuildPluginManager.java:132) 
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor 
.java:208) 
     ... 19 more 
Caused by: liquibase.exception.LiquibaseException: liquibase.command.CommandExec 
utionException: java.lang.NullPointerException 
     at liquibase.integration.commandline.CommandLineUtils.doDiffToChangeLog(
CommandLineUtils.java:197) 
     at liquibase.integration.commandline.CommandLineUtils.doDiffToChangeLog(
CommandLineUtils.java:174) 
     at org.liquibase.maven.plugins.LiquibaseDatabaseDiff.performLiquibaseTas 
k(LiquibaseDatabaseDiff.java:182) 
     at org.liquibase.maven.plugins.AbstractLiquibaseMojo.execute(AbstractLiq 
uibaseMojo.java:394) 
     ... 22 more 
Caused by: liquibase.command.CommandExecutionException: java.lang.NullPointerExc 
eption 
     at liquibase.command.AbstractCommand.execute(AbstractCommand.java:13) 
     at liquibase.integration.commandline.CommandLineUtils.doDiffToChangeLog(
CommandLineUtils.java:195) 
     ... 25 more 
Caused by: java.lang.NullPointerException 
     at java.util.Arrays$ArrayList.<init>(Arrays.java:2842) 
     at java.util.Arrays.asList(Arrays.java:2828) 
     at liquibase.diff.output.changelog.core.MissingPrimaryKeyChangeGenerator 
.fixMissing(MissingPrimaryKeyChangeGenerator.java:76) 
     at liquibase.diff.output.changelog.ChangeGeneratorChain.fixMissing(Chang 
eGeneratorChain.java:48) 
     at liquibase.diff.output.changelog.ChangeGeneratorFactory.fixMissing(Cha 
ngeGeneratorFactory.java:99) 
     at liquibase.diff.output.changelog.DiffToChangeLog.generateChangeSets(Di 
ffToChangeLog.java:140) 
     at liquibase.diff.output.changelog.DiffToChangeLog.print(DiffToChangeLog 
.java:120) 
     at liquibase.diff.output.changelog.DiffToChangeLog.print(DiffToChangeLog 
.java:76) 
     at liquibase.diff.output.changelog.DiffToChangeLog.print(DiffToChangeLog 
.java:59) 
     at liquibase.command.DiffToChangeLogCommand.run(DiffToChangeLogCommand.j 
ava:61) 
     at liquibase.command.AbstractCommand.execute(AbstractCommand.java:8) 
     ... 26 more 
[ERROR] 
[ERROR] Re-run Maven using the -X switch to enable full debug logging. 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please rea 
d the following articles: 
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionE 
xception 

显然,插件所在的JPA实体,是能够将它们与数据库进行比较,但当它尝试生成更改日志时会出现问题。

任何建议如何解决这个问题?

+0

它看起来像你的org.liquibase:liquibase - Maven的插件有一些问题? – soorapadman

+0

您使用的是什么版本的liquibase?根本原因是'at liquibase.diff.output.changelog.core.MissingPrimaryKeyChangeGenerator .fixMissing(MissingPrimaryKeyChangeGenerator.java:76)''但是当我查看最近的源代码时,该行号似乎与异常不匹配。 – SteveDonie

+0

我没有下载liquibase。我只是将它用作Maven依赖项。你可以从pom文件中看到插件vesrion是3.4.1。我也有: org.liquibase liquibase核心 3.4.1 。从我看到的3.4.1是最后发布的版本。你会推荐使用哪一个? – Jimo

回答

0

我已经解决了这个问题。显然,liquibase-maven-plugin v.3.4。*有问题。我只是不得不在上面的pom文件中将版本更改为3.3.5,它工作。它不能正常工作 - 我有一个JPA实体CatalogItem,hibernate从中创建CATALOG_ITEM数据库表,但在此之后,当我运行mvn liquibase:diff而不是此表的差异时,pluign会为CATALOGITEM DB生成createTable更改table和dropTable for CATALOG_ITEM,即 - liquibase hiberante maven插件无法将CatalogItem实体识别为CATALOG_ITEM数据库表的ORM模型。

我将标志着这个答案是正确的,因为严格来说,它解决了原来的问题...

+0

只是在黑暗中拍摄,但是你是否已经用liquibase 3.4获得了这个解决方案? ...我们遇到同样的问题,如果可能的话,想使用最新版本的liquibase。 – Mike

+0

据说这在3.5.0中修复 - https://liquibase.jira.com/browse/CORE-2679 – chrismarx

相关问题