【发布时间】:2011-05-05 08:56:59
【问题描述】:
我们正在将构建文件从 ant 转换为 maven 插件。我们正在尝试在 maven 插件中启动/停止数据库 (hsqldb)。
我们成功启动了数据库。但是我们认为插件在执行插件时会停止数据库。执行后数据库应该会继续运行,但它似乎马上停止了。
我们的猜测是我们应该使用 'fork' 和 'spawn' 属性(它们也在我们的 ant 的 build.xml 中),但我们不知道如何在我们的 java 类中实现它们DatabaseController(从 AbstractMojo 扩展而来)。
有什么想法吗?
我们正在使用 hsqldb,这是我们如何初始化它的代码:
hsqlServer = new Server();
hsqlServer.setLogWriter(null);
hsqlServer.setSilent(true);
hsqlServer.setDatabaseName(0, "database");
hsqlServer.setDatabasePath(0, "file:data/database");
getLog().info("Starting server!");
hsqlServer.start();
当我们运行插件时,数据库启动,我们甚至设法创建表并向其写入数据。然后插件停止,服务器随之自动停止。
如果我们运行另一个插件,一个停止服务器,我们总是在这一行得到一个 nullPointerException:
hsqlServer.stop();
亲切的问候,
杰伦
【问题讨论】:
-
好吧,如果你在
hsqlServer.stop()得到一个NullPointerException,那么hsqlServer一定是空的,对吧?还是您的意思是hsqlServer.stop()抛出 NullPointerException?在这种情况下,请提供堆栈跟踪。 -
nullPointerException 已修复,我们现在可以在 cmd 中运行数据库。问题是:当我们运行插件时,当插件停止时数据库仍然关闭。我们创建了某种循环来使数据库保持活动状态,然后它就完全可以工作了。现在唯一的问题是:我们不能再在 cmd 中做任何事情,因为程序被“困”在循环中,我们想避免这种情况。也许还有其他一些方法可以解决这个问题,但我想不出除了分叉和/或产卵之外的其他方法。
标签: java ant maven-plugin hsqldb spawn