我能在Maven构建中使用PostgreSQL吗?

3

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


你能否从命令行启动和停止服务器?如果是,那么只需在预先/后置集成测试阶段使用maven-antrun插件即可。 - lexicore
正如我在问题中提到的那样 - PostgreSQL服务器没有安装在该计算机上。 - yegor256
我从未提到在本地机器上启动/停止服务器。 - lexicore
在我的情况下,它并没有安装在任何地方。我需要在Maven构建周期内安装、启动、测试、停止和卸载 - 一切都需要进行。 - yegor256
6个回答

6
您正在尝试将Maven的应用范围扩展到远远超出预期的范围,因此在它能正常工作之前,您需要付出相当大的努力。
幸运的是,PostgreSQL可以作为zip归档文件下载。
如上所述,Maven可以使用Ant任务来扩展其范围。 Ant有一系列解压文件和运行命令的任务。 序列如下:
- 在已知目录(INSTALL_DIR)中解压postgresql-xxx.zip - 创建数据目录(DATA_DIR) - /bin/init-db -D - /bin/postgres -D - /bin/create_db -EUNICODE test
这样,您就可以获得一个带有测试数据库的运行服务器。
进一步问题:创建用户、安全性(您可能希望通过TCP/IP连接,但默认情况下禁用该功能,这需要在启动数据库之前编辑配置文件)
祝您好运。

谢谢,明白了。PostgreSQL在Maven Central上以ZIP压缩包的形式可用吗? - yegor256
现在可以使用,但不是官方支持的: com.github.adrianboimvaser:postgresql-dist:9.2.4 - adrianboimvaser

5

我开始编写一个用于此目的的插件:

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

它处于早期阶段,缺乏文档,但大部分功能都可用。 我已经发布了0.1版本到Maven Central。

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

干杯!


太棒了,这正是我一直在寻找的! - yegor256

0

0

我认为通常的情况是有一个正在运行的集成测试数据库,并且在构建之间不关闭/重启它。

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


是的,我真的想要。我该如何从Maven中做到呢?有没有适用于PostgreSQL的插件?我需要安装它,启动,运行测试,停止,卸载。 - yegor256

0

0

你好像在尝试构建一个完整的持续集成环境。你应该考虑使用像Cruise Control或Bamboo这样的完整CI工具。

我以前是这样做的,设置一个专用的CI数据库,可以从CI服务器访问,然后有一系列的bash/python/其他脚本作为成功构建步骤运行,然后可以运行任何额外的集成任务。再加上类似于liquibase的东西,你可以清除CI数据库,并确保每次构建都是最新的模式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接