Maven 插件开发 - 如何使 Maven 阻塞直到执行完成

发布于 2024-12-03 19:08:03 字数 665 浏览 0 评论 0原文

我有一些启动 Web 服务器并侦听请求的 java 代码。我想从自定义 Maven 插件目标启动 Web 服务器。

这工作正常(启动我的 Web 服务器并侦听请求):

public static void main(String[] args) {
  MyWebServer webserver = new MyWebServer();
  webserver.startServer();
}

我想将其放入自定义 Maven 插件中:

/**
 *
 * @goal start
 * 
 */
public class MyMojo
    extends AbstractMojo
{
    public void execute()
        throws MojoExecutionException
    {
        (new MyWebServer()).startServer();
    }
}

它几乎可以工作,只是 Maven 不会停止让 Web 服务器响应请求。它调用 startServer,然后似乎停止它并立即继续执行其他任务。

有人知道如何告诉 maven 等待/阻塞直到从命令行收到 CTRL-C 吗?我希望它的行为类似于 jetty maven 插件的工作方式。

谢谢, 戴夫

I've have some java code that starts a web server and listens for requests. I'd like to start the web server from a custom maven plugin goal.

This works fine (starts my web server and listens for requests):

public static void main(String[] args) {
  MyWebServer webserver = new MyWebServer();
  webserver.startServer();
}

I'd like to put this inside a custom maven plugin:

/**
 *
 * @goal start
 * 
 */
public class MyMojo
    extends AbstractMojo
{
    public void execute()
        throws MojoExecutionException
    {
        (new MyWebServer()).startServer();
    }
}

It almost works, except that Maven doesn't stop to let the web server respond to requests. It calls startServer and then appears to stops it and immediately continues on with other tasks.

Anyone know how to tell maven to wait/block until it receives CTRL-C from command line? I'd like it to behave similar to the way the jetty maven plugin works.

Thanks,
Dave

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

谁与争疯 2024-12-10 19:08:04

有点黑客,但简单地添加一个 System.in.read() 就可以了:

/**
 *
 * @goal start
 * 
 */
public class MyMojo
    extends AbstractMojo
{
    public void execute()
        throws MojoExecutionException
    {
        try{
        (new MyWebServer()).startServer();

        System.out.println("Press any key to stop the server");
        byte name[] = new byte[100];
        System.in.read(name);
    } catch (Exception e) {
        System.out.println(e);
    }
    }
}

我还发现这个问题对于其他使用 Maven 插件的人来说可能有用:Maven 插件执行另一个插件

A bit of a hack, but simply adding a System.in.read() does the trick:

/**
 *
 * @goal start
 * 
 */
public class MyMojo
    extends AbstractMojo
{
    public void execute()
        throws MojoExecutionException
    {
        try{
        (new MyWebServer()).startServer();

        System.out.println("Press any key to stop the server");
        byte name[] = new byte[100];
        System.in.read(name);
    } catch (Exception e) {
        System.out.println(e);
    }
    }
}

I also found this question which might be useful for others working on maven plugins: Maven plugin executing another plugin

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文