gpt4 book ai didi

java - 从 fatjar 运行 jetty

转载 作者:行者123 更新时间:2023-11-30 03:55:43 28 4
gpt4 key购买 nike

我正在开发一个java应用程序,它在main方法中启动jetty服务器。当我在我的 i.d.e (STS) 中运行它时,效果很好,但是当我使用 gradle 将其打包为 fatjar 时,服务器启动,但没有可用资源。它的行为方式让我相信它没有正确加载 web.xml。在遵循一些指南后,这是我用来启动 jetty 服务器的方法:

public class JettyServer {

public static void main(final String[] args) throws Exception {
final Server server = new Server(8080);
final WebAppContext root = new WebAppContext();
root.setContextPath("/");
root.setDescriptor(Thread.currentThread().getContextClassLoader().getResource("web.xml")
.getPath());
root.setResourceBase(".");
server.setHandler(root);
server.start();
server.join();
}
}

我的 web.xml 位于我的 src/main/resources 中,正如我所说,当我在 STS 中运行它时,服务器会按预期启动。

这是我在 gradle 中配置 jar 任务来构建 fatjar 的方式:

jar{
from { configurations.runtime.collect { it.isDirectory() ? it : zipTree(it) } } {
exclude "META-INF/*.SF"
exclude "META-INF/*.DSA"
exclude "META-INF/*.RSA"
}
manifest {
attributes 'Main-Class': 'com.main.JettyServer'
}
}

当我运行这个时,jar 就会被构建,如果我打开 jar,我可以在其中看到我的 web.xml 文件,但它似乎没有被读取。我需要改变什么?我是否错误地引用了 web.xml?

最佳答案

对于基于 SWT 的应用程序,我也有类似的设置。下面的代码片段对我有用:

 root.setDescriptor(root + "/resources/web.xml");
root.setResourceBase(JettyServer.class.getClassLoader().getResource(WEBAPPDIR).toExternalForm());//WEBAPPDIR Directory should end with a slash

关于java - 从 fatjar 运行 jetty ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23244528/

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