我有一个使用 Jetty 作为嵌入式应用程序服务器的 webapp。我还为它设置了一个 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;
}