В чем разница между liquibase diff и diffChangeLog? Как запустить команду maven для diffChangeLog?

#spring #jpa #liquibase

#spring #jpa #liquibase

Вопрос:

Я новичок в Liquibase, и я узнал, что два режима diff и diffChangeLog используют целевую и базовую (ссылочные) базы данных в противоположном направлении.

 Using "diff" will show the difference going from 'base (reference)' -> 'target' which makes sense.
While "diffChangeLog" outputs the difference going from 'target' to 'base (reference)'.
  

Я запустил цель maven liquibase:diffChangeLog , но я получаю следующую ошибку

 [ERROR] Could not find goal 'diffChangeLog' in plugin 
org.liquibase:liquibase-maven-plugin:3.5.1 among available goals dropAll, 
rollback, clearCheckSums, updateTestingRollback, changelogSync, updateSQL, 
migrateSQL, generateChangeLog, dbDoc, status, listLocks, changelogSyncSQL, 
releaseLocks, migrate, tag, diff, rollbackSQL, futureRollbackSQL, update, 
help -> [Help 1]
  

Что я сделал не так? Как я могу работать liquibase:diffChangeLog как maven?

Ответ №1:

diff ( liquibase:diff ) maven goal используется для нахождения разницы между состояниями БД.

diffChangeLog является аргументом для command line выполнения Liquibase операции с использованием command line tool . Цель maven не вызывается liquibase:diffChangeLog

Внутренне код выглядит следующим образом

     if ("diff".equalsIgnoreCase(this.command)) {
    CommandLineUtils.doDiff(createReferenceDatabaseFromCommandParams(this.commandParams, fileOpener), database, StringUtils.trimToNull(this.diffTypes), finalSchemaComparisons);
  }
  else if ("diffChangeLog".equalsIgnoreCase(this.command)) {
    CommandLineUtils.doDiffToChangeLog(this.changeLogFile, createReferenceDatabaseFromCommandParams(this.commandParams, fileOpener), database, diffOutputControl, StringUtils.trimToNull(this.diffTypes), finalSchemaComparisons);
  }