【问题标题】:Why am I getting the wrong MANIFEST? [duplicate]为什么我得到错误的清单? [复制]
【发布时间】:2014-12-20 17:47:57
【问题描述】:

我正在尝试访问我的 java 应用程序中的 MANIFEST.MF 文件。

我正在做以下事情

   //prints /usr/local/apache-tomcat-8.0.9/webapps/MyProject/WEB-INF/lib/activation-1.1.jar!/META-INF/MANIFEST.MF
    System.out.println( "We are looking at "+this.getClass().getClassLoader()
                        .getResource("META-INF/MANIFEST.MF"));` 
//Im looking to print  /usr/local/apache-tomcat-8.0.9/webapps/MyProject/META-INF/MANIFEST.MF


//prints-/usr/local/apache-tomcat-8.0.9/lib/
System.out.println("The base path is"+this.getClass().getClassLoader()
                        .getResource("."));

这是目录结构

MyProject
-src/main/java/my/packages/MyClass.java
-target
   -MyProject.war

任何关于如何纠正我的代码的想法都会很棒。

我的战争目录结构

Myproject
META-INF            apidocs             other folders
WEB-INF             

【问题讨论】:

  • MyProject.war 的目录结构是什么?
  • @JigarJoshi:添加目录结构
  • @Kroyo。我做的和答案完全一样,面临这个问题。
  • 当你启动应用程序时,你的类路径是什么样子的 /
  • @JigarJoshi.:我不太明白你的意思。我打印出来的基本路径中没有回答您的问题吗?或者您正在寻找不同的东西?

标签: java maven


【解决方案1】:

你需要使用 ServletContext.getResourceAsStream

我发现类加载器方法对于网络应用程序上的 MANIFEST 文件并不可靠。

如果你的清单是由你的构建过程生成的,如果你从 maven 或 eclipse wtp 运行你的应用程序,它也不会可靠地工作。

问题的真实副本:How do I read the manifest file for a webapp running in apache tomcat?

【讨论】:

  • 您有代码 sn-p 来备份吗?我没有使用网络应用程序。我可以访问 ServletContext 吗?
  • 为什么你的例子中有tomcat路径?我稍后会发布代码(目前在手机上)。
  • 这是this.getClass().getClassLoader()的结果,应该返回当前类的绝对路径
  • 我的清单是由 maven 自动生成的。那么我有什么选择呢?
  • 你是如何执行这个项目的?看起来tomcat仍在运行您的代码。顺便说一句,当我指的是 webapp 时,我的意思是您的代码正在像 tomcat 这样的 servlet 容器中运行,即使它没有类似 webapp 的行为。
猜你喜欢
  • 2015-06-03
  • 1970-01-01
  • 2016-07-08
  • 1970-01-01
  • 2015-07-16
  • 1970-01-01
  • 2012-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多