Каково рекомендуемое место для сценариев SQL (DDL)?
каково рекомендуемое место для SQL, DDL, ... скрипты в стандартная структура каталогов Maven?
Я уверен, что почти каждый веб-проект использует БД и какие-то SQL-скрипты, которые нужно где-то хранить, так что, вероятно, будет "лучшим" местом, где хранить эти файлы?
посоветуйте, пожалуйста.
5 ответов:
Я думаю, что нет лучшей практики для этого. В моем прошлом проекте, я создал отдельный каталог для хранения такого сценария SQL.
src/main/db
.он не будет упакован в final JAR по умолчанию (что является предпочтительным способом в большинстве случаев), но достаточно удобно, чтобы он был упакован в сборку. Вы даже можете упаковать их в основную банку артефактов, добавив соответствующее объявление ресурса или используя Maven build-helper плагин.
однако, все зависит от вашего использования этого скрипта. Однако я бы рассмотрел возможность размещения их в ресурсах только тогда, когда они действительно являются ресурсами, которые будут загружены вашим приложением.
Я думаю, что это целиком зависит от того, когда и как эти скрипты обрабатываются:
- Время Компиляции: это вещи, которые ваш компилятор / toolchain потребляют и производят артефакты. Руководство maven по этому очень ясно, и поэтому файлы будут принадлежать где-то в
src/main/
, Какsrc/main/sql
илиsrc/main/db
. Хотя я бы этого не сделал, я мог видеть, что они используются задачей при компиляции для изменения вашей БД. Я мог видеть, что скрипты liquibase используются здесь, а затем выполняются через задачу maven.- Runtime: они используются вашей средой выполнения и либо изменяют ее, либо потребляются ею для получения результатов. Размещение их в
src/main/resources
кажется разумным, чтобы ваши процессы во время выполнения могли использовать их, чтобы изменить вашу БД, как вы считаете нужным - скажем, как часть вашей обработки hot-fix при развертывании или как часть ваших обычных усилий по управлению версиями БД на лету. Опять же, возможно, вы отправляете liquibase с вашим приложением, а затем делаете изменения в БД на месте путь...- Разработки: мне кажется, это наиболее вероятный сценарий. Где я должен хранить свой DDL, чтобы правильно отслеживать их в VCS и по-прежнему поддерживать мою структуру, совместимую с maven? Для меня это
src/scripts/sql
илиsrc/scripts/db
. Это помещает их в качестве" исходных " файлов в пределах компетенции maven, но в месте, которое предназначено для использования более специальным образом.
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>
очень многое зависит от вашего пробега, но прежде всего это хорошая идея, чтобы отделить приложение от базовой структуры базы данных. Поэтому я рекомендую вам переместить все материалы, связанные с базой данных, в отдельный проект maven. Сделав это, скрипты базы данных имеют хороший слот в /src/main/scripts.