Одна действительно похожая проблема: вы можете просто игнорировать часть пути перед файлом changelog-master.xml
. В моем сценарии я разрегистрировал проект в C:\DEV\workspace
, а мой коллега выписал проект в C:\another_folder\TheWorkspace
.
Я бы рекомендовал прочитать http://forum.liquibase.org/topic/changeset-uniqueness-causing-issues-with-branched-releases-overlapped-changes-not-allowed-in-other-files первый.
Как и другие, вам нужно установить свойство logicalFilePath
для элемента <databaseChangeLog>
.
Вам также нужно будет определенным образом указать свойство changeLogFile
при вызове liquibase. Я вызываю его из командной строки. Если вы укажете абсолютный или относительный путь к changeLogFile
без пути к классам, как здесь, он будет включать весь путь в таблицу DATABASECHANGELOG:
liquibase.bat ^
--changeLogFile=C:\DEV\more\folders\schema\changelog-master.xml ^
...
тогда liquibase сломается, если вы переместите свои миграции в любую папку, кроме указанной выше. Чтобы исправить это (и убедиться, что другие разработчики могут использовать любое место рабочей области, которое они хотят), вам нужно сослаться на changelogFile
из пути к классам:
liquibase.bat ^
--classpath=C:\DEV\more\folders ^
--changeLogFile=schema/changelog-master.xml ^
...
Во-первых, в моей таблице DATABASECHANGELOG были значения FILENAME (у меня может быть косая черта назад), например
C:\DEV\more\folders\schema\subfolder\script.sql
Во-вторых, моя таблица DATABASECHANGELOG имеет такие значения FILENAME, как
subfolder/script.sql
Меня вполне устраивают такие имена файлов. Каждый разработчик может запускать liquibase из любой папки. Если мы решим позже переименовать или переместить отдельный файл SQL, мы можем указать старое значение в свойстве logicalFilePath
элемента <changeSet>
.
Для справки, мой changelog-master.xml
состоит только из таких элементов, как
<include file="subfolder/script.sql" relativeToChangelogFile="true"/>
person
Patrick
schedule
11.08.2017