我正在开发一个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?
答案 0 :(得分:1)
对于基于SWT的应用程序,我也有类似的设置。 以下代码段对我有用:
root.setDescriptor(root + "/resources/web.xml");
root.setResourceBase(JettyServer.class.getClassLoader().getResource(WEBAPPDIR).toExternalForm());//WEBAPPDIR Directory should end with a slash
答案 1 :(得分:1)
最后设法让它排序,这很简单。只需交换这一行:
root.setDescriptor(Thread.currentThread().getContextClassLoader().getResource("web.xml")
.getPath());
这个:
root.setDescriptor(JettyServer.class.getResource("/WEB-INF/web.xml").toString());
我接受了Mubin的回答,因为他们让我走上了正确的道路。
答案 2 :(得分:0)
如果您想从JAR文件中读取内容,那么您需要使用getResourceAsStream()而不是getResource()。这是一个片段来说明:
public class Demo
{
public static void main( String[] args ) {
ClassLoader cl = Thread.currentThread().getContextClassLoader();
InputStream is = cl.getResourceAsStream("stuff/myresource.xml");
if (is != null) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
try {
System.out.println(reader.readLine());
}
catch(Exception ex) {
ex.printStackTrace();
}
}
}
}
您可以通过在类路径上放置JAR来测试它,以便:
C:\ dev8 \ stack_overflow> jar tvf stuff.jar 0 Wed Apr 23 15:11:44 BST 2014 META-INF / 71 Wed Apr 23 15:11:44 BST 2014 META-INF / MANIFEST.MF 0 Wed Apr 23 15:11:24 BST 2014东西/ 16 Wed Apr 23 15:06:40 BST 2014 stuff / myresource.xml
C:\ DEV8 \ STACK_OVERFLOW>