SQL(DDL)脚本的推荐位置是什么?

Kaw*_*awu 62 sql maven

Maven标准目录结构中 SQL,DDL,...脚本的推荐位置是什么?

我敢打赌,几乎每个Web项目都使用数据库和某种需要存储在某处的SQL脚本,那么保存这些文件的"最佳"位置可能是什么?

请指教.

Adr*_*hum 57

我认为没有最好的做法.在我过去的项目中,我创建了一个用于存储此类SQL脚本的单独目录.

例如src/main/db.

默认情况下它不会被打包到最终的JAR(在大多数情况下这是首选的方式),但它很方便让它在程序集中打包.您甚至可以通过添加相应的资源声明或使用maven build-helper插件将它们打包到主工件JAR中.

但是,一切都取决于您对此脚本的使用情况.我简单的"经验法则"是,我会考虑将它们resources/放入应用程序加载的资源中.

  • 我会选择类似于src/main/java和src/main/scala的src/main/sql,请参阅http://maven.apache.org/pom.html#Resources (14认同)

rbe*_*amy 25

我认为这完全取决于处理这些脚本的时间和方式:

  1. 编译时间:这些是编译器/工具链消耗并产生工件的东西.关于这个非常明确的maven指南,因此文件将属于某个地方src/main/,如src/main/sqlsrc/main/db.虽然我不这样做,但我可以看到编译时任务使用这些来修改你的数据库.我可以看到liquibase脚本在这里使用,然后通过maven任务执行.
  2. 运行时:这些由运行时环境使用,可以对其进行修改,也可以由它使用以生成结果.放置它们src/main/resources似乎是合理的,以便您的运行时进程可以使用它们根据您的需要更改您的数据库 - 例如,作为部署中的热修复处理的一部分,或作为正常数据库即时版本控制工作的一部分.再一次,也许您使用您的应用程序运送liquibase,然后以这种方式进行就地DB更改...
  3. 设计时间:在我看来,这是最可能出现的情况.我应该在哪里存储我的DDL以便在VCS中正确跟踪它们,并且仍然保持我的maven兼容结构?对我来说,这是src/scripts/sqlsrc/scripts/db.这将它们作为"源"文件放在maven的范围内,但是在一个旨在以更临时的方式使用的地方.


MaD*_*aDa 5

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>
Run Code Online (Sandbox Code Playgroud)

  • “...但请记住,它会被打包到您的最终 jar 中,所以这取决于您是否想在您的生产代码中显示它。” 这就是我犹豫是否将其放入资源目录的确切原因。毕竟,我将“资源”解释为或多或少是您可以从中拖动库(从网页引用)的 JSF2 资源目录,因此 SQL 脚本在这方面不太合格。 (3认同)