我可以在Maven构建中使用PostgreSQL吗?

时间:2011-06-15 22:29:57

标签: java unit-testing postgresql maven integration-testing

我正在尝试创建集成测试,这需要运行PostgreSQL服务器。是否有可能在maven构建中启动服务器并在测试完成时停止它(在一个单独的过程中,我认为)?假设机器上没有安装PostgreSQL服务器。

6 个答案:

答案 0 :(得分:6)

你试图将maven推到远远超出预期的信封范围,所以在它发挥作用之前你会受到相当大的伤害。

幸运的是,postgresql可以作为zip存档下载。

如上所述,maven可以使用ant任务扩展其范围。 Ant有大量的任务来解压缩文件和运行命令。顺序如下:

  • 在一个众所周知的目录中解压缩postgresql-xxx.zip - > INSTALL_DIR
  • 创建数据目录 - > DATA_DIR
  • / bin / init-db -D
  • / bin / postgres -D
  • / bin / create_db -EUNICODE test

这应该为您提供一个带有测试数据库的正在运行的服务器。

更多问题:创建用户,安全性(您可能希望通过TCP / IP进行连接,但如果我记得正确,则默认情况下禁用此功能,这需要在启动数据库之前编辑配置文件)

...

祝你好运。

答案 1 :(得分:5)

我开始为此目的编写插件:

https://github.com/adrianboimvaser/postgresql-maven-plugin

它处于非常早期的阶段且缺乏文档,但大部分都有效。 我已经将版本0.1发布到了Maven Central。

我还将所有平台的PostgreSQL二进制发行版发布为maven工件。 您可以在插件的集成测试中找到使用模式。

干杯!

答案 2 :(得分:0)

据我所知。但是,您可以run a remote command启动服务器。

答案 3 :(得分:0)

我认为通常的情况是运行集成测试数据库,而不是在构建之间关闭/重新启动它。

但如果您真的想要,可以设置持续集成服务器来启动/停止数据库。

答案 4 :(得分:0)

您听起来像是在尝试构建完整的持续集成环境。您应该考虑使用完整的CI工具,例如Cruise Control或Bamboo。

我之前是如何设置一个可以从CI服务器访问的专用CI数据库,然后有一系列bash / python /任何脚本作为After Successful Build步骤运行,然后可以运行任何您喜欢的额外集成任务。与liquibase这样的东西配对,你可以消灭CI数据库并确保它符合每个构建的最新模式。

答案 5 :(得分:0)

只是为这个问题带来一些新观点:

您也可以将postgresql数据库作为docker实例启动。 Docker的插件生态系统似乎仍在不断变化,因此您可能需要自行决定哪种适合。以下是一些加快搜索速度的链接: