【问题标题】:How to handle multiple database schema creation scripts with Maven?如何使用 Maven 处理多个数据库模式创建脚本?
【发布时间】:2010-10-06 13:48:36
【问题描述】:

我有一个正在开发的应用程序,它支持多个数据库,包括 SQL*Server 2008、Oracle 10G、Oracle 11G、MYSQL 5 等。我已经在 Maven 中做了三件事:

1) 每个数据库都有一个配置文件,以便系统可以在构建期间将其用于集成测试。

2) Maven 调用 hibernate3 插件,使用 hbm2ddl 自动生成模式脚本。

3) 设置了 Hudson 矩阵构建,以便自动针对每个数据库运行集成测试。

我注意到(毫不奇怪)由 hbm2ddl 创建的脚本因数据库方言而异。

但是,在为客户打包系统时,我们必须手动进入各种 Hudson 构建并从那里提取特定于数据库的脚本。一个乏味的过程,我相信会在最糟糕的时刻咬我们!!

我们是否可以让 Maven 自动生成并收集所有这些数据库脚本,以便将它们与我们发送给客户的 WAR 文件一起打包?我正在考虑使用 Maven 程序集插件将其全部压缩,但不确定!

【问题讨论】:

    标签: database maven-2 build packaging hbm2ddl


    【解决方案1】:

    我们是否可以让 Maven 自动生成并收集所有这些数据库脚本,以便将它们与我们发送给客户的 WAR 文件一起打包? 我正在考虑使用 Maven 程序集插件将其全部压缩,但不确定!

    问题是脚本是为每次配置文件运行生成的(至少这是我的理解),除非您将它们打包在某种不同的工件(可能是程序集)中并在每次运行时安装/部署它们,否则您赢了'无法在后续步骤中使用 Maven 获取它们。

    另一种方法是定义一个模块,其中定义了hbm2ddl 目标的多次执行。但我担心这会破坏整个配置文件。

    或者您可以使用 M2 Extra Steps Plugin 来依赖 Hudson,并在您的 Maven 构建中添加一些构建后步骤(不确定这是否有帮助)。

    【讨论】:

    • 不确定这是否会有所帮助,但请告诉我您的想法。
    • 再想一想,我认为数据库使用Maven的profile机制可能是个错误。对于开发人员机器来说,这真是太容易和有用了!!!但是对于 CI 构建机器...不好。
    • @Pascal - 我正在认真考虑放弃 hbm2ddl 并使用 Liquibase。随着项目的成熟,无论如何我将不得不提供版本之间的迁移路径。看起来它的标签工具可以很好地处理集成测试数据的加载。我唯一的问题是让 Maven liquibase 插件在所有方言中生成 SQL 脚本......
    • @HDave 使用数据库迁移工具是 IMO 一个非常好的主意(正如您所指出的,无论如何您都必须提供更改脚本来升级客户数据库)。而且因为您必须处理多个数据库,所以 Liquibase 似乎是最好的选择(它甚至提供了一些 Hibernate 支持,允许针对 Hibernate 实体区分模式,非常好)。不过,我对他们的 maven 插件没有太多经验(我看过几篇人们使用 antrun 调用它来访问所有功能的帖子)。而且您仍然需要几个 execution(和配置文件)才能在单个构建中生成所有内容。
    • @Pascal 感谢您的补充信息。我认为 Liquibase 的关键点之一是我将不再生成特定于数据库的 SQL 脚本。我将使用 servlet 侦听器(或者我的客户可以运行脚本),该侦听器使用 XML 更改日志文件直接针对他们的数据库执行 liquibase。因此我完全避免了这个问题。据你所知,这合理吗?
    猜你喜欢
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多