Каково рекомендуемое расположение для сценариев SQL (DDL)? - PullRequest
62 голосов
/ 07 октября 2011

Каково рекомендуемое расположение для сценариев SQL, DDL, ... в стандартной структуре каталогов Maven ?

Могу поспорить, что почти каждый веб-проект использует БД и некоторые виды сценариев SQLкоторые нужно где-то хранить, так что, вероятно, будет «лучшим» местом для хранения этих файлов?

Пожалуйста, сообщите.

Ответы [ 5 ]

57 голосов
/ 07 октября 2011

Я думаю, что нет лучшей практики для этого.В моем прошлом проекте я создал отдельный каталог для хранения такого сценария SQL.

Например src/main/db.

Он не будет упакован в окончательный JAR по умолчанию (что является предпочтительным способом в большинстве случаев), но это достаточно удобно, чтобы упаковывать его в сборке.Вы даже можете упаковать их в основной JAR-файл артефакта, добавив соответствующее объявление ресурса или используя плагин maven build-helper.

Однако все зависит от того, как вы используете этот скрипт.Мое простое «практическое правило» заключается в том, что я хотел бы поместить их в resources/ только тогда, когда они действительно являются ресурсами, загружаемыми приложением.

25 голосов
/ 26 марта 2015

Я думаю, что это полностью зависит от того, когда и как обрабатываются эти сценарии:

  1. Время компиляции : это то, что ваш компилятор / набор инструментов использует и создает артефакты.Руководство Maven в этом очень ясно, и, следовательно, файлы будут принадлежать где-то в src/main/, как src/main/sql или src/main/db.Хотя я бы этого не делал, я мог видеть, как они используются задачей при компиляции для изменения вашей БД.Я мог видеть сценарии liquibase, используемые здесь и затем выполняемые с помощью задачи maven.
  2. Runtime : они используются вашей средой выполнения и либо изменяют ее, либо используются ею для получения результатов,Размещение их в src/main/resources кажется разумным, так что ваши процессы во время выполнения могут потреблять их для изменения вашей БД по своему усмотрению - скажем, как часть вашей оперативной обработки исправлений при развертывании или как часть вашей обычной работы по созданию версий БД на лету,Опять же, может быть, вы поставляете жидкость с вашим приложением, а затем делаете изменения БД на месте таким образом ...
  3. Время разработки : Мне кажется, это наиболее вероятный сценарий.Где я должен хранить свой DDL, чтобы правильно отслеживать их в VCS и при этом поддерживать мою структуру, совместимую с maven?Для меня это src/scripts/sql или src/scripts/db.Это помещает их как «исходные» файлы в сферу компетенции maven, но в место, предназначенное для более специализированного использования.
4 голосов
/ 07 октября 2011

src/main/resources - это хорошее место, но помните, что оно упаковано в вашу последнюю банку, поэтому все зависит от того, хотите ли вы раскрыть это в рабочем коде или нет.

Если нет, вы можете отфильтровать это, добавив выдержку конфигурации maven-jar-plugin в соответствующую pom.xml:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
         <excludes>src/main/resources/privateSubdir/**</excludes>
    </configuration>
</plugin>
1 голос
/ 07 октября 2011

Я бы использовал src/main/resources для этой цели.Возможно создание подпапки там.

0 голосов
/ 08 мая 2015

Это очень сильно зависит от вашего пробега, но прежде всего это хорошая идея отделить ваше приложение от базовой структуры базы данных. Поэтому я рекомендую вам переместить все вещи, связанные с базой данных, в отдельный проект maven. После этого у сценариев базы данных есть хороший слот в / src / main / scripts.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...