在the Maven standard directory structure中SQL,DDL,...脚本的推荐位置是什么?什么是SQL(DDL)脚本的推荐位置?
我敢打赌,几乎每一个Web项目使用DB和某种需要存储在某个地方的SQL脚本,所以什么可能会是“最佳”的地方,以保持这些文件?
请指教。
在the Maven standard directory structure中SQL,DDL,...脚本的推荐位置是什么?什么是SQL(DDL)脚本的推荐位置?
我敢打赌,几乎每一个Web项目使用DB和某种需要存储在某个地方的SQL脚本,所以什么可能会是“最佳”的地方,以保持这些文件?
请指教。
我认为没有最好的实践这一点。在我过去的项目中,我创建了一个单独的目录来存储这样的SQL脚本。
例如src/main/db
。
它不会被打包在默认情况下最终JAR(这是大多数情况下的首选方式),但它是足够方便让它在组装打包。您甚至可以将它们打包在主工件JAR中,方法是添加相应的资源声明或使用maven build-helper插件。
然而,一切都取决于这个脚本您的使用。不过,我会考虑只有当它们真的是您的应用程序加载的资源时才将它们放入资源中。
我会用src/main/resources
用于此目的。也许在那里创建一个子文件夹。
src/main/resources
是个好地方,但要记住它被打包到最终的jar,所以如果你想在你的产品代码或不向外界透露这个看情况。
如果没有,你可以通过添加的maven-JAR-插件配置摘录到合适pom.xml
筛选出这一点:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<excludes>src/main/resources/privateSubdir/**</excludes>
</configuration>
</plugin>
“......但记住它会被打包到你的最终jar中,所以这取决于你是否想在你的生产代码中显示这个。”这是我犹豫将它放入资源目录的确切原因。毕竟,我将“资源”解释为或多或少是JSF2资源目录,您可以从您的库中引用(从网页引用),因此SQL脚本在此方面并不完全合格。 – Kawu
@Kawu在这种情况下,最好将这些东西完全放在Maven项目目录之外 - 尽管我不会为了方便起见而将它们移动。 – MaDa
完全同意。我们通常将这些保存在src/main下的单独文件夹中,因此他们从来没有机会错误地将其包含在构建产品中。我喜欢你的过滤器想法,尽管@MaDa – Perception
我认为这完全取决于何时以及如何将这些脚本处理上:
src/main/
,像src/main/sql
或src/main/db
。虽然我不会这样做,但我可以看到这些被编译中的任务用来修改您的数据库。我可以看到在这里使用liquibase脚本,然后通过maven任务执行。src/main/resources
似乎是合理的,使你的运行过程中会消耗他们改变你的数据库,你认为合适 - 也就是说,作为您的热修复处理的一部分上部署,或作为您的正常DB的一部分,在即时版本的努力。再次,也许你用你的应用发布liquibase,然后以这种方式进行就地数据库更改...src/scripts/sql
或src/scripts/db
。这将它们作为maven的权限范围内的“源”文件,但在一个旨在用于更特别的方式的地方。这很大程度上取决于你的里程数,但首先将应用程序与底层数据库结构分开是个好主意。因此,我建议你将所有数据库相关的东西移到一个单独的Maven项目中。完成之后,数据库脚本在/ src/main/scripts中有一个很好的插槽。
从我简单。 – MaDa
我会去src/main/sql类似于src/main/java和src/main/scala,请参阅http://maven.apache.org/pom.html#Resources – MeTTeO