Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在maven插件中设置fork和spawn_Java_Ant_Maven Plugin_Hsqldb_Spawn - Fatal编程技术网

Java 在maven插件中设置fork和spawn

Java 在maven插件中设置fork和spawn,java,ant,maven-plugin,hsqldb,spawn,Java,Ant,Maven Plugin,Hsqldb,Spawn,我们正在将一个构建文件从ant转换为maven插件。我们正在尝试在maven插件中启动/停止数据库(hsqldb) 我们成功地启动了数据库。但是我们认为插件在执行时会停止数据库。数据库应该在执行后继续运行,但似乎马上就停止了 我们猜测应该使用“fork”和“spawn”属性(它们也在ant的build.xml中),但我们不知道如何在DatabaseController(从AbstractMojo扩展而来)的java类中实现它们 有什么想法吗 我们正在使用hsqldb,下面是我们初始化它的代码:

我们正在将一个构建文件从ant转换为maven插件。我们正在尝试在maven插件中启动/停止数据库(hsqldb)

我们成功地启动了数据库。但是我们认为插件在执行时会停止数据库。数据库应该在执行后继续运行,但似乎马上就停止了

我们猜测应该使用“fork”和“spawn”属性(它们也在ant的build.xml中),但我们不知道如何在DatabaseController(从AbstractMojo扩展而来)的java类中实现它们

有什么想法吗

我们正在使用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();
亲切问候,


Jeroen

您可以做的一件事是,查看现有的maven插件,这些插件可以分叉新的java进程。Maven surefire插件,做一些类似的事情。Surefire有一个名为
forkMode
的配置(将在pom.xml中指定),用于控制分叉。 您可能需要通过插件的(svn签出代码)来了解它。 我对surefire不太熟悉。但首先,您可以阅读以下类(
#fork(对象测试集,属性…


您可以做的一件事是,查看现有的maven插件,这些插件可以对新的java进程进行分叉。maven surefire插件可以做类似的事情。surefire有一个名为
forkMode
的配置(将在pom.xml中指定),它控制分叉。 您可能需要通过插件的(svn签出代码)来了解它。 我对surefire不太熟悉。但首先,您可以阅读以下类(
#fork(对象测试集,属性…


在maven中执行的任何代码都会在另一个进程中分叉。我在一些项目领域中使用过进程,它没有关于这一点的明确文档。 您可以这样调用代码:

Thread.currentThread().setDaemon(true);
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();
有了守护进程线程,maven可以让您的代码在后台运行。
这是假设,但你可以试试。

在maven中执行的任何代码都会在另一个进程中分叉。我曾在一些项目领域中使用过进程,但它没有明确的文档。 您可以这样调用代码:

Thread.currentThread().setDaemon(true);
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();
有了守护进程线程,maven可以让您的代码在后台运行。
这是一个假设,但你可以试试。

好吧,如果你在
hsqlServer.stop()
上得到一个NullPointerException,那么
hsqlServer
必须为null,对吗?或者你的意思是
hsqlServer.stop()
抛出一个NullPointerException?在这种情况下,请提供堆栈跟踪。NullPointerException已修复,我们现在可以在cmd中运行数据库。问题是:当我们运行插件时,当插件停止时,数据库仍会关闭。我们创建了某种循环以保持数据库活动,然后它完全工作。现在唯一的问题是:我们不能再在cmd中执行任何操作,因为程序被“困”在循环中,我们希望避免这种情况。也许有其他方法可以解决这个问题,但我想不出除了fork和/或spawn之外的其他方法。如果在
hsqlServer.stop()中出现NullPointerException
,那么
hsqlServer
必须为空,对吗?或者您的意思是
hsqlServer.stop()
抛出一个NullPointerException?在这种情况下,请提供堆栈跟踪。NullPointerException已修复,我们现在可以在cmd中运行数据库。问题是:当我们运行插件时,当插件停止时,数据库仍会关闭。我们创建了某种循环以保持数据库活动,然后它完全工作。现在唯一的问题是:我们不能再在cmd中执行任何操作,因为程序“被困”在循环中,我们希望避免这种情况。也许有其他方法可以解决这个问题,但我想不出除了fork和/或spawn之外的其他方法。