2017-10-18 1 views
0

Hier ist die Struktur, einer der maven Abhängigkeits jar Projekt, das ein Liquibase Änderungsprotokolle in classpath wie folgt enthält:Warum kann liquibase den Klassenpfad db.changelog nicht auflösen?

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 

Hier 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> 

Welches geladen von feder Bootapplication.properties folgend

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

Erfolgreich ausgeführt, wenn es sich im selben Projekt befindet. Auf abhängiges Projekt ausgeführt es wie folgt:

  1. DATABASECHANGELOG Tabelle erstellt
  2. DATABASECHANGELOGLOCK Tabelle erstellt
  3. Aber keine Update Migration ausgeführt!

Wenn db.changelog-master.xml geladen von liquibase Maven Plugin, wie folgend:

<?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> 

Fehler mit der Meldung:

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 

In dieser Situation Ihre Richtlinie erwartet für fehlerfrei liquibase migration für th e abhängige Projekt diejenigen verwenden feder Boot oder liquibase-Maven-Plugin

Antwort

0

Die Struktur erwähnt für chorke─init─change-1.0.00.GA.jar enthält liquibase Änderungsprotokolle in Classpath gut genug ist und feder Bootapplication.properties auch konfiguriert genau.Aber es einige dumme Fehler waren in Liquibase-Maven-Plugin Konfiguration Es sollte wie folgt korrigiert werden:

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

Es gab zwei Fehler in liquibase-Maven-Plugin Konfiguration das sind:

  1. erste für changeLogFile
  2. zweite für propertyFile

Kein Präfix wie classpath: oder classpath:/ für changeLogFile erforderlich. Außerdem muss kein absoluter oder relativer Pfad wie ${project.build.directory}/test-classes/ für propertyFile verwendet werden. Lass es einfach. Es ist das eigene Geschäft von liquibase-maven-plugin, wie man es von classpath löst.

Daneben gibt es einige zusätzliche Tipps für stressfreien tragbaren Migration könnte hilfreich sein, die sind wie

folgende
  1. immer relativen Pfad für jeden databaseChangeLog verwenden. Beispiel ist in Ihrem db.changelog-master.xml erwähnt
  2. Verwendung von logischen Dateipfade für jeden changeSet

Hier ist das Beispiel für logischen Dateipfad:

<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> 

Hoffen, es wäre Lösen Sie Ihre Probleme richtig.

Verwandte Themen