gpt4 book ai didi

jar - 将 Jetty 资源库设置为嵌入在同一 jar 文件中的静态文件

转载 作者:行者123 更新时间:2023-12-04 20:06:24 25 4
gpt4 key购买 nike

我试图访问打包在同一个 .jar 文件(testJetty.jar)中的静态资源(例如 first.html),该文件还有一个启动 jetty (v.8)服务器(MainTest.java)的类。我无法正确设置资源库。

我的 jar 文件(testJetty.jar)的结构:
testJetty.jar

  • first.html
  • MainTest.java

  • ==
    在本地机器上工作正常,但是当我将它包装在 jar 文件中然后运行它时,它不起作用,给出“404:找不到文件”错误。

    我尝试使用以下值设置资源库,所有这些都失败了:

    a) 尝试将其设置为 。
    resource_handler.setResourceBase("."); // Results in directory containing the jar file, D:\Work\eclipseworkspace\testJettyResult

    b) 尝试从 getResource 获取它
    ClassLoader loader = this.getClass().getClassLoader();
    File indexLoc = new File(loader.getResource("first.html").getFile());
    String htmlLoc = indexLoc.getAbsolutePath();
    resource_handler.setResourceBase(htmloc); // Results in D:\Work\eclipseworkspace\testJettyResult\file:\D:\Work\eclipseworkspace\testJettyResult\testJetty1.jar!\first.html

    c) 尝试获取 webdir
    String webDir = this.getClass().getProtectionDomain()
    .getCodeSource().getLocation().toExternalForm();
    resource_handler.setResourceBase(webdir); // Results in D:/Work/eclipseworkspace/testJettyResult/testJetty1.jar

    这三种方法都没有奏效。

    任何帮助或替代方案将不胜感激

    谢谢
    阿巴斯

    最佳答案

    该线程中提供的解决方案有效,但我认为解决方案的一些清晰度可能有用。
    如果您正在构建一个 fat jar 子并使用 ProtectionDomain您可能会遇到一些问题,因为您正在加载整个 jar !

    class.getProtectionDomain().getCodeSource().getLocation().toExternalForm();
    所以更好的解决方案是其他提供的解决方案
    contextHandler.setResourceBase(
    YourClass.class
    .getClassLoader()
    .getResource("WEB-INF")
    .toExternalForm());
    这里的问题是,如果您正在构建一个胖 jar,您并没有真正将 webapp 资源转储到 WEB-INF 中,而是可能会进入 jar 的根目录,因此一个简单的解决方法是创建一个文件夹 XXX 并使用第二种方法作为如下:
    contextHandler.setResourceBase(
    YourClass.class
    .getClassLoader()
    .getResource("XXX")
    .toExternalForm());
    或者更改您的构建工具以将 webapp 文件导出到该给定目录。也许 Maven 会在 Jar 上为您执行此操作,但 gradle 不会。

    关于jar - 将 Jetty 资源库设置为嵌入在同一 jar 文件中的静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25660467/

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