2017-10-18 222 views
0

这里是结构中,行家依赖性罐子项目,其中的一个含有类路径liquibase更改日志作为下列之一:为什么liquibase无法解决db.changelog类路径?

chorke─init─change-1.0.00.GA.jar! 
└─ META-INF/ 
    └─ migrations/ 
     ├─ db.changelog-master.xml 
     ├─ config/ 
     │ ├─ db.changelog-config.xml 
     │ ├─ db.changelog-property.xml 
     │ └─ db.changelog-restrict.xml 
     └─ change/ 
      ├─ db.changelog-1.xml 
      ├─ db.changelog-2.xml 
      ├─ V1/ 
      │ ├─ db.changelog-1.0.xml 
      │ ├─ db.changelog-1.1.xml 
      │ ├─ V1.0/ 
      │ │ ├─ db.changelog-1.0.00.xml 
      │ │ ├─ db.changelog-1.0.01.xml 
      │ │ ├─ V1.0.00/ 
      │ │ │ ├─ db.changelog-1.0.00.000.xml 
      │ │ │ ├─ db.changelog-1.0.00.001.xml 
      │ │ │ ├─ db.changelog-1.0.00.002.xml 
      │ │ │ └─ db.changelog-1.0.00.999.xml 
      │ │ └─ V1.0.01/ 
      │ │  ├─ db.changelog-1.0.01.000.xml 
      │ │  ├─ db.changelog-1.0.01.001.xml 
      │ │  ├─ db.changelog-1.0.01.002.xml 
      │ │  └─ db.changelog-1.0.01.999.xml 
      │ └─ V1.1/ 
      │  ├─ db.changelog-1.1.00.xml 
      │  ├─ db.changelog-1.1.01.xml 
      │  ├─ V1.1.00/db.changelog-1.1.00.###.xml 
      │  └─ V1.1.01/db.changelog-1.1.01.###.xml 
      └─ V2/ 
       ├─ db.changelog-2.#.xml 
       └─ V2.#/V2.#.##/db.changelog-2.#.##.###.xml 

这里是db.changelog-master.xml

<?xml version="1.0" encoding="UTF-8"?> 
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" 
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd 
    http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"> 

    <includeAll path="config" relativeToChangelogFile="true"/> 
    <include file="change/db.changelog-1.xml" relativeToChangelogFile="true"/> 
    <include file="change/db.changelog-2.xml" relativeToChangelogFile="true"/> 
</databaseChangeLog> 

哪一个加载由弹簧引导application.properties如下

liquibase.change-log=classpath:/META-INF/migrations/db.changelog-master.xml 

当它在同一个项目中时执行得很好。对因项目执行它如下:

  1. DATABASECHANGELOG表创建
  2. DATABASECHANGELOGLOCK表创建
  3. 但没有更新迁移进行!

db.changelog-master.xml加载由liquibase Maven插件如下:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <!-- intentionally configuration skipped --> 
    <dependencies> 
     <dependency> 
      <groupId>org.chorke.init</groupId> 
      <artifactId>chorke-init-change</artifactId> 
      <version>1.0.00.GA</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.liquibase</groupId> 
       <artifactId>liquibase-maven-plugin</artifactId> 
       <version>3.5.3</version> 
       <configuration> 
        <propertyFileWillOverride>true</propertyFileWillOverride> 
        <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase> 
        <changeLogFile>classpath:/META-INF/migrations/db.changelog-master.xml</changeLogFile> 
        <propertyFile>${project.build.directory}/test-classes/liquibase-update.properties</propertyFile> 
       </configuration> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>update</goal> 
         </goals> 
        </execution> 
       </executions> 
       <dependencies> 
        <dependency> 
         <groupId>org.yaml</groupId> 
         <artifactId>snakeyaml</artifactId> 
         <version>1.14</version> 
        </dependency> 
       </dependencies> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

错误与消息:

Failed to execute goal 
org.liquibase:liquibase-maven-plugin:3.5.3:update (default) on project 
chorke-init-migrat: Error setting up or running Liquibase: 
classpath:/META-INF/migrations/db.changelog-master.xml does not exist 

在这种情况下,您的准则无误liquibase迁移 Ë依赖项目的使用春季启动liquibase - Maven的插件

回答

0

chorke─init─change-1.0.00.GA.jar提到的结构包含liquibase变更日志类路径是不够好,春季启动application.properties还配置究竟。但也有在liquibase - Maven的插件配置一些愚蠢的错误,应更正如下:

<configuration> 
    <propertyFileWillOverride>true</propertyFileWillOverride> 
    <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase> 
    <changeLogFile>META-INF/migrations/db.changelog-master.xml</changeLogFile> 
    <propertyFile>liquibase-update.properties</propertyFile> 
</configuration> 

有在liquibase - Maven的插件配置两个错误的是:

  1. 第一个为changeLogFile
  2. ,第二个为propertyFile

不需要使用像classpath:classpath:/这样的前缀作为changeLogFile,也不需要使用像${project.build.directory}/test-classes/那样的绝对或相对路径作为propertyFile。保持简单。这是自己的业务liquibase-maven-plugin如何解决它从classpath

在那旁边,有一些额外的提示,可能是轻松自由便携式迁移这些都是有益如下

  1. 始终使用相对路径为每个databaseChangeLog。例如在你db.changelog-master.xml每个changeSet

这里提到

  • 使用逻辑文件路径是逻辑文件路径例如:

    <changeSet author="chorkeorg" id="1508234245316-1" logicalFilePath="V0/V0.0/V0.0.00/db.changelog-0.0.00.000.xml"> 
        <createSequence cacheSize="20" cycle="false" 
         incrementBy="1" maxValue="999999999999999999999999999" minValue="10001" 
         ordered="false" sequenceName="CK_SQ_AUTHOR" startValue="10181" /> 
    </changeSet> 
    

    希望这将是正确解决您的问题。