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