2015-09-24 147 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

相關問題