Как использовать liquibase-modify-column.jar в проекте maven?

#java #xml #maven #migration #liquibase

#java #xml #мавен #миграция #liquibase

Вопрос:

 <databaseChangeLog 
  xmlns="http://www.liquibase.org/xml/ns/dbchangelog" 
  xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext
   http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd 
   http://www.liquibase.org/xml/ns/dbchangelog 
   http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
    <changeSet author="Administrator" id="20" runOnChange="true"> 
        <modifyColumn tableName="TEST_TABLE">
            <column name="FIELD_NAME" type="java.sql.Types.VARCHAR(250)" />
        </modifyColumn>
    </changeSet>
</databaseChangeLog> 

Я новичок в liquibase, кто-нибудь может мне помочь в том, как использовать liquibase-modify-column jar для использования функции modifyColumn в liquibase 3.6.3 для устранения текущей проблемы.

cvc-complex-type.2.4.a: Обнаружено недопустимое содержимое, начинающееся с элемента ‘{«http://www.liquibase.org/xml/ns/dbchangelog «:modifyColumn}’. Один из «{«http://www .liquibase.org/xml/ns/dbchangelog «:комментарий»,http://www.liquibase.org/xml/ns/dbchangelog «:CreateTable, «http://www.liquibase.org/xml/ns/dbchangelog «: Выпадающий список»,http://www.liquibase.org/xml/ns/dbchangelog «:CreateView, «http://www.liquibase.org/xml/ns/dbchangelog «:Переименовать просмотр»,http://www.liquibase.org/xml/ns/dbchangelog «: Дропвью»,http://www.liquibase.org/xml/ns/dbchangelog «:вставить, «http://www.liquibase.org/xml/ns/dbchangelog «:AddColumn, «http://www.liquibase.org/xml/ns/dbchangelog «:sql, «http://www.liquibase.org/xml/ns/dbchangelog «:Процедура создания»,http://www.liquibase.org/xml/ns/dbchangelog «: Процедура удаления»,http://www.liquibase.org/xml/ns/dbchangelog «:sqlFile, «http://www.liquibase.org/xml/ns/dbchangelog «:Переименовываемый»,http://www.liquibase.org/xml/ns/dbchangelog «:Переименовать столбец»,http://www.liquibase.org/xml/ns/dbchangelog «:Выпадающий столбец»,http://www.liquibase.org/xml/ns/dbchangelog «:mergeColumns, «http://www.liquibase.org/xml/ns/dbchangelog «:modifyDataType, «http://www.liquibase.org/xml/ns/dbchangelog «:Последовательность создания»,http://www.liquibase.org/xml/ns/dbchangelog «: Альтернативная последовательность»,http://www.liquibase.org/xml/ns/dbchangelog «: Последовательность выпадения»,http://www .liquibase.org/xml/ns/dbchangelog «:createIndex, «http://www.liquibase.org/xml/ns/dbchangelog «:dropIndex, «http://www.liquibase.org/xml/ns/dbchangelog «:addNotNullConstraint, «http://www.liquibase.org/xml/ns/dbchangelog «:dropNotNullConstraint, «http://www.liquibase.org/xml/ns/dbchangelog «:addForeignKeyConstraint, «http://www.liquibase.org/xml/ns/dbchangelog «:dropForeignKeyConstraint, «http://www.liquibase.org/xml/ns/dbchangelog «:dropAllForeignKeyConstraints, «http://www.liquibase.org/xml/ns/dbchangelog «:addPrimaryKey, «http://www.liquibase.org/xml/ns/dbchangelog «: dropPrimaryKey, «http://www.liquibase.org/xml/ns/dbchangelog «:addLookupTable, «http://www.liquibase.org/xml/ns/dbchangelog «:Добавить автоинкремент»,http://www.liquibase.org/xml/ns/dbchangelog «:addDefaultValue, «http://www.liquibase.org/xml/ns/dbchangelog «:dropDefaultValue, «http://www.liquibase.org/xml/ns/dbchangelog «:addUniqueConstraint, «http://www.liquibase.org/xml/ns/dbchangelog «:dropUniqueConstraint, «http://www.liquibase.org/xml/ns/dbchangelog «:Пользовательский обмен»,http://www.liquibase.org/xml/ns/dbchangelog «: обновление»,http://www.liquibase.org/xml/ns/dbchangelog «:удалить»,http://www .liquibase.org/xml/ns/dbchangelog «:loadData, «http://www.liquibase.org/xml/ns/dbchangelog «:loadUpdateData, «http://www.liquibase.org/xml/ns/dbchangelog «:Выполнить команду»,http://www.liquibase.org/xml/ns/dbchangelog «:пусто»,http://www.liquibase.org/xml/ns/dbchangelog «: остановись»,http://www.liquibase.org/xml/ns/dbchangelog «:откат, WC[##другое:»http://www.liquibase.org/xml/ns/dbchangelog «], «http://www.liquibase.org/xml/ns/dbchangelog ожидается, что»:modifySql}’.

используемые версии: liquibase-3.6.3 и liquibase-modify-column-3.1.jar

Комментарии:

1. Я не знаю этих пакетов, но ошибка, которую вы получаете, связана с искаженным XML. Тегу <modifyColumn> нужен дочерний элемент, который не был указан в соответствии с определением схемы файла. Если бы вы могли предоставить XML-файл, который выдает эту ошибку, мы могли бы изучить его.

2. @MaxRumford я обновил XML-данные. Пожалуйста, проверьте это.

Ответ №1:

POM.xml

 <plugin>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-maven-plugin</artifactId>
    <version>3.6.3</version>
    <dependencies>
        <dependency>
            <groupId>org.liquibase.ext</groupId>
            <artifactId>liquibase-modify-column</artifactId>
            <version>3.1</version>
        </dependency> 
    </dependencies>
</plugin> 

 <databaseChangeLog 
  xmlns="http://www.liquibase.org/xml/ns/dbchangelog" 
  xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext
   http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd 
   http://www.liquibase.org/xml/ns/dbchangelog 
   http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
    <changeSet author="Administrator" id="20" runOnChange="true"> 
        <ext:modifyColumn tableName="TEST_TABLE">
            <column name="FIELD_NAME" type="java.sql.Types.VARCHAR(250)" />
        </ext:modifyColumn>
    </changeSet>
</databaseChangeLog> 

добавление liquibase-modify-column.jar в зависимости от liqubase и использование ext:modifyColumn </ext:modifyColumn> заставит использовать функционал modifyColumn с последней версией liquibase

https://forum.liquibase.org/t/custom-preconditions-as-an-extension-not-working/1428

Комментарии:

1. Как я понимаю из связанного сообщения на форуме, *-ext.xsd схема представляет собой пустую проверку xsd, позволяющую все . Таким образом, вы отказываетесь от безопасности типов, обычно обеспечиваемой использованием xsd. Чтобы обеспечить безопасность с помощью XMLS, вы должны, если возможно, обновить, чтобы использовать текущую структуру, используя <modifyDataType> . Спасибо, что опубликовали ответ!

2. да, то, что вы сказали, было правильно @MaxRumford. Изменение моего текущего файла журнала изменений сделает намного больше работы. итак, я использую -ext .

Ответ №2:

<modifyColumn> не допускается там, где вы его разместили. Насколько я вижу в документах <modifyColumn> , для liquibase вообще нет допустимого типа данных. Вместо этого вам нужно будет поместить любой из тегов, упомянутых в сообщении об ошибке. Вы должны проверить https://docs .liquibase.com/change-types/home.html для получения списка допустимых типов изменений , которые можно использовать в разделе <changeSet> . Основываясь на том, что вы вкладываете в свой <modifyColumn> тег, я предполагаю, что вы ищете modifyDataType .

Комментарии:

1. Вы правы @MaxRumford, но мы также можем использовать modify-column.jar чтобы использовать тег modiFyColumn в соответствии с этой liquibase github wiki — github.com/liquibase/liquibase-modify-column/wiki

2. Ваш XML повторно используется http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd как используемая схема, которая не содержит modifyColumn тип. При ручном изменении целевого пространства имен и источника схемы с http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-1.0.xsd на http://www.liquibase.org/xml/ns/dbchangelog/1.0 http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-1.0.xsd xml проверяется правильно. Возможно, вы захотите проверить, правильно ли вы вызываете методы liquibase-modify-column-3.1.

3. привет, спасибо за вашу большую поддержку @MaxRumford. Я могу использовать ту же схему, добавив ext перед modifyColumn следующим образом <ext:modifyColumn> . Это заставило мою миграцию работать нормально.

4. Просто для пояснения (и для консультаций, когда другие найдут этот пост): можете ли вы опубликовать ответ о том, как вам удалось это сделать? Пожалуйста, укажите шаги по тому, как вы заставили свою программу работать так, как вы хотели, например, новые инструкции кода, ручное изменение свойств и т.д… Нет проблем, рад помочь! 🙂