the Maven standard directory structure中SQL,DDL,...脚本的推荐位置是什么?
我敢打赌,几乎每个网络项目都使用数据库和某种需要存储在某处的SQL脚本,那么保留这些文件的“最佳”位置可能是什么?
请告知。
答案 0 :(得分:56)
我认为没有最好的做法。在我过去的项目中,我创建了一个单独的目录来存储这样的SQL脚本。
例如src/main/db
。
默认情况下它不会被打包到最终的JAR(在大多数情况下这是首选的方式),但它很方便让它在程序集中打包。您甚至可以通过添加相应的资源声明或使用maven build-helper插件将它们打包到主工件JAR中。
但是,一切都取决于您对此脚本的使用情况。我简单的“经验法则”是,只有当它们真的是应用程序加载的资源时,我才会考虑将它们放在resources/
中。
答案 1 :(得分:25)
我认为这完全取决于处理这些脚本的时间和方式:
src/main/
中的某个位置,如src/main/sql
或src/main/db
。虽然我不会这样做,但我可以看到编译任务使用这些来修改你的数据库。我可以看到liquibase脚本在这里使用,然后通过maven任务执行。src/main/resources
中似乎是合理的,以便您的运行时进程可以使用它们根据您的需要更改您的数据库 - 例如,作为部署中的热修复处理的一部分,或者作为常规数据库的一部分即时版本化工作。再次,也许您使用您的应用程序运送liquibase,然后以这种方式进行就地DB更改... src/scripts/sql
或src/scripts/db
。这将它们作为"来源" maven范围内的文件,但在一个旨在以更特别的方式使用的地方。答案 2 :(得分:4)
src/main/resources
是一个不错的地方,但请记住它会被打包到你的最后一个jar中,所以这取决于你是否想要在你的生产代码中揭示它。
如果没有,您可以通过将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>
答案 3 :(得分:1)
我会将src/main/resources
用于此目的。也许在那里创建一个子文件夹。
答案 4 :(得分:0)
这在很大程度上取决于您的里程数,但首先将您的应用程序与底层数据库结构分开是一个好主意。因此,我建议您将所有与数据库相关的内容移动到单独的maven项目中。完成后,数据库脚本在/ src / main / scripts中有一个很好的插槽。
答案 5 :(得分:0)
我将应用程序划分为多个Eclipse项目,每个架构层一个。这包括数据库。本质上,我只是为该项目创建了一种新的打包类型“数据库”。我创建了一个src / main / sql文件夹,在该文件夹下,我放置了数据库模式(例如src / main / sql / security)而不是Java包。我想如果您使用目录,那将是首先是目录,然后是它们之下的架构。在每个架构文件夹中,我为每种类型的数据库对象(表,视图等)放置一个文件夹,以便最终得到例如src / main / sql / security / tables,然后放置所有表定义那里的那个模式的文件。我很高兴阅读有关以这种方式进行操作的任何意见。