【问题标题】:Setting fork and spawn in a maven plugin在 Maven 插件中设置 fork 和 spawn
【发布时间】: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


【解决方案1】:

您可以做的一件事是查看现有的 maven 插件,这些插件会分叉新的 java 进程。 Maven-surefire-plugin 之一,做类似的事情。 Surefire 有一个名为forkMode 的配置(将在 pom.xml 中指定),它控制分叉。 您可能必须通过插件的source(svn 签出代码)才能弄清楚。 我对肯定火不太熟悉。但作为开始,您可以阅读以下课程 (#fork( Object testSet, Properties...)!

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

【讨论】:

    【解决方案2】:

    在 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 可以让你的代码在后台运行。 猜的,不过你可以试试。

    【讨论】:

      猜你喜欢
      • 2011-03-12
      • 2019-12-21
      • 1970-01-01
      • 2021-01-13
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      • 2011-11-25
      • 2015-09-24
      相关资源
      最近更新 更多