我們在我們的項目中使用了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實體,是能夠將它們與數據庫進行比較,但當它嘗試生成更改日誌時會出現問題。
任何建議如何解決這個問題?
它看起來像你的org.liquibase:liquibase - Maven的插件有一些問題? – soorapadman
您使用的是什麼版本的liquibase?根本原因是'at liquibase.diff.output.changelog.core.MissingPrimaryKeyChangeGenerator .fixMissing(MissingPrimaryKeyChangeGenerator.java:76)''但是當我查看最近的源代碼時,該行號似乎與異常不匹配。 – SteveDonie
我沒有下載liquibase。我只是將它用作Maven依賴項。你可以從pom文件中看到插件vesrion是3.4.1。我也有: org.liquibase liquibase核心 3.4.1 。從我看到的3.4.1是最後發佈的版本。你會推薦使用哪一個? –
Jimo