java - 在 Maven 插件中设置 fork 和 spawn

标签 java ant maven-plugin hsqldb spawn

我们正在将构建文件从 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();

亲切的问候,

杰伦

最佳答案

您可以做的一件事是,查看执行新 Java 进程 fork 的现有 Maven 插件。 Maven-surefire-plugin 之一,做类似的事情。 Surefire 有一个名为 forkMode 的配置(将在 pom.xml 中指定),它控制 fork 。 您可能需要通过 source (svn checkout the code) 插件来弄清楚。 我对 surefire 不太熟悉。但作为开始,您可以阅读以下类 (#fork( Object testSet, Properties...)!

./maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/ForkStarter.java

关于java - 在 Maven 插件中设置 fork 和 spawn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5895051/

相关文章:

java - 数组删除重复项时出现问题

java - 如何以编程方式获取依赖项的 SCM 连接 URL?

maven-2 - 如何用 Maven 替换 Ant?

java - Maven 插件编译正常但在执行期间找不到类

maven - 使用 maven-dependency-plugin 清除人工制品

Java JUnit 测试找不到类

Java、SWT : how to make a shell transparent (not alpha!)

java - 在没有 Thread.sleep() 的情况下延迟涉及 GUI 的 java 程序

java - 在 Tomcat 上部署后显示应用程序上下文路径

file - Ant:在目录中查找文件的路径