gpt4 book ai didi

java - 如何启动 Jetty Embedded 作为 Jenkins 构建的一部分

转载 作者:太空宇宙 更新时间:2023-11-04 07:28:35 26 4
gpt4 key购买 nike

我有一个网络应用程序,它使用 Jetty 作为嵌入式应用程序服务器。我还为其设置了一个 Main 类,当我使用以下命令运行它时,它会启动服务器:

java -jar foo.war

到这一部分,一切都按预期进行。我目前遇到的问题是将其与 Jenkins 集成。

如果我将 java -jar foo.war 作为批处理命令执行,服务器会启动,但构建不会完成 - 它只是继续显示服务器控制台(毕竟这是有道理的,因为一切都是同一进程的一部分)。我想我应该生成一个新进程,但是如何在服务器启动后生成一个新进程并“通知”主进程?

只有在应用程序服务器启动后,我才需要运行验收测试(也称为 Selenium 测试)。

Jenkins(不幸的是)在 Windows Server 下运行。不确定这是否相关,但下面是我用来启动应用程序服务器的代码(稍微简化):

public static void main(String[] args) throws Exception {
Server server = new Server(8082);
server.setHandler(getHandlers(server));
server.setStopAtShutdown(true);
server.start();
server.join();
}

private static HandlerList getHandlers(Server server) {
ProtectionDomain protectionDomain = WebServer.class.getProtectionDomain();
URL location = protectionDomain.getCodeSource().getLocation();
WebAppContext webapp = new WebAppContext(location.toExternalForm(), "/");
HandlerList handlers = new HandlerList();
handlers.setHandlers(new Handler[] {
webapp
});
return handlers;
}

最佳答案

server.join(); 调用将使当前线程(运行 main() 的线程)等待,直到服务器停止。

嵌入单元测试内部时,也不需要 server.setStopAtShutdown(true)

只需执行以下操作即可。

  • 构建服务器(例如使用 junit 的 @BeforeClass)
  • 添加处理程序
  • server.start();
  • 执行测试
  • server.stop();

关于java - 如何启动 Jetty Embedded 作为 Jenkins 构建的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18132389/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com