【问题标题】:Reading Manifest File Inside of Jar with Servlet使用 Servlet 读取 Jar 内的清单文件
【发布时间】:2014-05-13 01:16:26
【问题描述】:

我想我犯了一个简单的错误,但也许你们可以帮助我。我有一个 Jetty 网络服务器。我在下面部署了一个 servlet:

{Jetty-Folder}/webapps/BotServlet/WEB-INF
                                 --------/lib/Server_BotServlet.jar
                                 --------/web.xml

因此,Server_BotServlet 内部的 servlet 可以适当地启动,我可以通过适当的 url 访问它。我的问题现在是 Server_BotServlet.jar 中的清单文件。

Server_BotServlet.jar
----> /META-INF/MANIFEST.MF

Manifest 文件是在 Eclipse 和表单中使用 ANT 脚本添加的:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.4
Built-Date: 2014-04-01 18:53:54
Built-Version: 2014-04-01 18:53:54

问题:我无法在网络服务器中使用以下代码读取清单文件:

    InputStream inputStream = getServletConfig().getServletContext().getResourceAsStream("/META-INF/MANIFEST.MF");
    if(inputStream == null) {System.out.println("Input stream is null1");}
    try {
        Manifest manifest = new Manifest(inputStream);
        Attributes attributes = manifest.getMainAttributes();
        versionString = attributes.getValue("Built-Version");
    }
    catch(Exception e) {
        e.printStackTrace();
        versionString = "N/A";
    }

InputStream 最终总是等于 null。在另一种情况下,我让它打印出getServletContext().getContextPath,它会向我显示"/BotServlet/"。如果我错了,请纠正我,但是当一个 jar 在运行时加载时,它会从上下文路径中“运行”吗?或者我是否会错误地部署这些 jar,因为 getResourceAsStream() 似乎没有正确地看到 jar 文件。

我正在使用here描述的方法。

【问题讨论】:

    标签: java servlets ant jar manifest.mf


    【解决方案1】:

    Servlet 上下文是/BotServlet/ 而不是/BotServlet/WEB-INF/lib/Server_BotServlet.jar 文件。您可以将要读取的文件放入/WEB-INF/lib/myfile.txt 并访问它 - 或者您可以打开 jar (/BotServlet/WEB-INF/lib/Server_BotServlet.jar) 并读取您的清单。实际上,这取决于您的最终目标是什么。

    【讨论】:

      猜你喜欢
      • 2013-10-21
      • 2013-06-14
      • 1970-01-01
      • 2011-08-22
      • 2016-07-10
      • 2011-03-20
      • 2014-11-07
      • 2012-10-09
      • 1970-01-01
      相关资源
      最近更新 更多