Заполнение БД с помощью Maven

Допустим, моя стандартная конфигурация в Maven:

  • компилировать, тестировать и упаковывать - делайте как обычно
  • pre-integration-test:
    • Generate DB schema scripts (maven-antrun-plugin with concat)
    • Запустите эти скрипты в БД (sql-maven-plugin)
    • Запустите пользовательскую программу Java для заполнения БД данными (exec или antrun)
    • Запустите сервер из jar (maven-antrun-plugin, потому что exec не будет разветвляться)
  • интеграционный тест: запускать тесты, используя сервер, работающий из jar
  • постинтеграционный тест: остановить сервер (exec)

При обычном пути выполнения он работает просто отлично (кроме того, ошибки по модулю в заказе плагинов Maven).

Теперь я хотел бы иметь одну команду только для создания и выполнения сценариев схемы БД и другую команду только для запуска программы Java для заполнения базы данных.

До сих пор я полагал, что могу поместить install-schema, populate-db и start-jetty в их собственные профили, а затем:

mvn pre-integration-test -Pinstall-schema

Это плохо, потому что он все равно будет запускать все предыдущие фазы, и я действительно не хочу компилировать, тестировать и упаковывать для него.

Можно ли как-то запускать эти «вещи» (несколько исполнений плагинов, профиль) изолированно, игнорируя жизненный цикл или пропуская compile-test-package?


person Konrad Garus    schedule 03.12.2013    source источник


Ответы (1)


Да, я думаю, вы можете сделать это с помощью условной активации через определенные свойства профилей Maven, например:

<profile>
    <id>install-schema</id>
    <activation>
        <property>doItPlz</property>
    </activation>
</profile>
...

Таким образом, профиль активируется только в том случае, если данное свойство doItPlz присутствует, поэтому вы можете создать его для сборки, инициализации базы данных и т. д.

Затем команда, которую вы должны использовать, изменяется на:

mvn -DdoItPlz ...

Надеюсь, это чем-то поможет.

person rlegendi    schedule 03.12.2013
comment
Вопрос не столько в том, как запустить профиль по условию, сколько в том, как запустить только этот единственный профиль, полностью игнорируя жизненный цикл, пропуская компиляцию, тестирование, пакетирование и все остальное, что мне не нужно. . - person Konrad Garus; 03.12.2013
comment
Я не знаю, сколько у вас профилей, но разве это не решит вашу проблему, если вы назначите свойство для каждого из них? Таким образом, вы можете указать, какие профили запускать. - person rlegendi; 03.12.2013