SQL(DDL)脚本的推荐位置是什么?
Maven标准目录结构中 SQL,DDL,…脚本的推荐位置是什么?
我敢打赌,几乎每个Web项目都使用一个DB和一些需要存储在某个地方的SQL脚本,那么可能是保存这些文件的“最佳”位置?
请指教。
我认为这没有最佳做法。 在我以前的项目中,我创build了一个单独的目录来存储这样的SQL脚本。
例如src/main/db
。
它不会被打包到最终的JAR中(这在大多数情况下是首选的方式),但是它足够方便,可以在程序集中打包。 您甚至可以将它们打包在主工件JAR中,通过添加相应的资源声明或使用maven build-helper插件。
但是,这一切都取决于你在这个脚本上的使用。 不过,我只会考虑将它们放在资源中,只有当它们真的是您的应用程序加载的资源时。
我认为这完全取决于何时以及如何处理这些脚本:
- 编译时间 :这些是你的编译器/工具链消耗和产生工件的东西。 Maven的指导非常清楚,因此这些文件将属于
src/main/
某处,如src/main/sql
或src/main/db
。 虽然我不这样做,但我可以看到这些被编译中的任务用来修改你的数据库。 我可以看到在这里使用liquibase脚本,然后通过maven任务执行。 - 运行时 :这些由运行时环境使用,可以对其进行修改,或者由其使用来生成结果。 把它们放在
src/main/resources
似乎是合理的,这样你的运行时进程就可以使用它们,就像你认为合适的那样改变你的数据库 – 比如在部署时作为热修复处理的一部分,或者作为普通数据库的一部分版本控制努力。 再次,也许你用你的应用程序运输liquibase,然后就地改变数据库的方式… - devise时间 :这似乎是最有可能的情况。 我应该在哪里存储我的DDL,以便在VCS中正确地跟踪它们,并保持我的符合Maven的结构? 对我来说,这是
src/scripts/sql
或src/scripts/db
。 这将它们作为maven的权限范围内的“源”文件,但在一个devise用于更特别的方式的地方。
src/main/resources
是一个很好的地方,但是记住它被打包到你的最终jar中,所以这取决于你是否要在生产代码中显示这个。
如果不是的话,你可以通过添加maven-jar-pluginconfiguration摘要来过滤掉适当的pom.xml
:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <excludes>src/main/resources/privateSubdir/**</excludes> </configuration> </plugin>
我会使用src/main/resources
来达到这个目的。 也许在那里创build一个子文件夹。
这很大程度上取决于你的里程,但首先把你的应用程序和底层的数据库结构分开是个好主意。 因此,我build议你将所有数据库相关的东西移动到一个单独的Maven项目。 完成之后,数据库脚本在/ src / main / scripts中有一个很好的插槽。