【发布时间】:2011-12-02 22:25:11
【问题描述】:
the Maven standard directory structure 中 SQL、DDL、... 脚本的推荐位置是什么?
我敢打赌,几乎每个 Web 项目都使用数据库和某种需要存储在某处的 SQL 脚本,那么保存这些文件的“最佳”位置可能是什么?
请指教。
【问题讨论】:
the Maven standard directory structure 中 SQL、DDL、... 脚本的推荐位置是什么?
我敢打赌,几乎每个 Web 项目都使用数据库和某种需要存储在某处的 SQL 脚本,那么保存这些文件的“最佳”位置可能是什么?
请指教。
【问题讨论】:
我认为没有最佳实践。在我过去的项目中,我创建了一个单独的目录来存储此类 SQL 脚本。
例如src/main/db。
默认情况下它不会被打包成最终的 JAR(这是大多数情况下的首选方式),但将其打包成汇编已经足够方便了。您甚至可以通过添加相应的资源声明或使用 maven build-helper 插件将它们打包到主工件 JAR 中。
但是,这一切都取决于您对该脚本的使用情况。我的简单“经验法则”是,只有当它们确实是应用程序要加载的资源时,我才会考虑将它们放入 resources/。
【讨论】:
我认为这完全取决于处理这些脚本的时间和方式:
src/main/ 中的某个位置,例如src/main/sql 或src/main/db。虽然我不会这样做,但我可以看到这些被编译时的任务用来修改你的数据库。我可以看到这里使用了 liquibase 脚本,然后通过 maven 任务执行。src/main/resources 中似乎是合理的,以便您的运行时进程可以使用它们来更改您认为合适的数据库 - 比如说作为部署时热修复处理的一部分,或者作为正常数据库运行中版本控制工作的一部分.同样,也许您将 liquibase 与您的应用一起提供,然后以这种方式进行就地数据库更改...src/scripts/sql 或src/scripts/db。这将它们作为“源”文件放置在 maven 的范围内,但放置在一个旨在以更特别的方式使用的地方。【讨论】:
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>
【讨论】:
我会为此使用src/main/resources。也许在那里创建一个子文件夹。
【讨论】:
我将我的应用程序划分为多个 Eclipse 项目,每个架构层一个。这包括数据库。本质上,我只是为那个项目创建了一种新的“数据库”打包类型。我创建了一个 src/main/sql 文件夹,并在该文件夹下放置了数据库模式(例如 src/main/sql/security),而不是 Java 包。我想如果您使用目录,首先是目录,然后是模式。在每个模式文件夹中,我为每种类型的数据库对象(表、视图等)放置了一个文件夹,以便最终得到例如 src/main/sql/security/tables,然后放置所有表定义该架构的文件。我很乐意阅读有关这样做的任何意见。
【讨论】:
这在很大程度上取决于您的经验,但首先将您的应用程序与底层数据库结构分开是一个好主意。因此,我建议您将所有与数据库相关的东西移到一个单独的 Maven 项目中。完成后,数据库脚本在 /src/main/scripts 中有一个很好的位置。
【讨论】: