java - 从 fatjar 运行 jetty

标签 java gradle jetty executable-jar

我正在开发一个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/

相关文章:

java - Spring MVC : ResponseBodyAdvice doesn't get called for null response from controller

java - 使用 gradle 任务构建镜像时无法在 docker 容器内设置环境变量

java - jersey requestdispatcher 执行顺序

solr - 如何减少solr内存使用量?

javascript - 在node js中对数据进行签名并在Java中进行验证

java - 如何查找一个方法中调用的所有方法?

java - 关键字长度在java中为数组返回一个值

gradle - 从JaCoCo报告中删除特定的*目录*

android - Gradle,xml 中不支持的类型

java - 如何配置 jetty-maven-plugin 9 使用 https?