【问题标题】:Why does URL return null here when trying to get a resource inside Jar?为什么尝试在 Jar 中获取资源时,URL 会在此处返回 null?
【发布时间】:2014-12-20 18:52:23
【问题描述】:

我有这个 Jar 文件..

core.jar:

META-INF/...
com/...
config
  myLog4j.xml
schema

试图读取/加载的类在com/my/company/MyLogging.class

代码是这样的,在MyLogging类里面:

URL myUrl = MyLogging.class.getResource("/config/myLog4j.xml");

myUrlnull。它没有返回资源/文件。

编辑:包含路径图片。

焦油输出:

     0 Fri Oct 24 16:15:10 CDT 2014 META-INF/
   122 Fri Oct 24 16:15:08 CDT 2014 META-INF/MANIFEST.MF
     0 Wed Oct 22 16:40:26 CDT 2014 com/
     0 Wed Oct 22 16:40:26 CDT 2014 com/my/company/..
     .....
     0 Wed Oct 08 11:20:42 CDT 2014 config/
     0 Wed Oct 08 11:20:42 CDT 2014 config/email/
     0 Wed Oct 08 11:20:44 CDT 2014 schema/
     0 Wed Oct 08 11:20:42 CDT 2014 schema/alliance/
     0 Wed Oct 08 11:20:44 CDT 2014 schema/tibco/
  7972 Fri Oct 24 16:15:08 CDT 2014 com/my/company/MyLogging.class
  2045 Wed Oct 08 11:20:42 CDT 2014 config/myLog4j.xml
   400 Wed Oct 08 11:20:42 CDT 2014 config/email/bodyDashtemp.st
  1583 Wed Oct 08 11:20:42 CDT 2014 schema/Castor-XMLJavaScript.txt
 18958 Wed Oct 08 11:20:44 CDT 2014 schema/tibco/TIBCO_EventSchema.xsd

编辑:

我从命令行运行它。 JUnit 测试。

编辑:更多信息...

这个 (core.jar) 是一个依赖 Jar 文件。它包含在 JUnit 测试类文件的类路径中。

这个MyLogging.class 用于正在单元测试的类中。而我单元测试的类实际上是一个Struts2动作类。它是一个单元测试而不是集成测试。意思是,这个动作类被视为普通类而不是动作类。

编辑:

Manifest.mf内容:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.4
Created-By: pwa6460_26sr7ifx-20131203_01 (SR7) (IBM Corporation)

【问题讨论】:

  • 不。控件从该行跳转到 Catch 块。
  • 我想查看整个 try-catch 语句和堆栈跟踪。
  • 逐字发布jar tvf core.jar的输出。
  • 嗯,图像使它看起来像文件名为“myLog4j.xml”,带有前导空格。为什么不按照我的要求发布jar tvf core.jar 的输出?
  • 全部发布:如何启动应用、发生异常的相关代码 sn-p 以及异常堆栈跟踪。

标签: java file url jar nullpointerexception


【解决方案1】:

还有另一个.jar 包含MyLogging.class 加载earlie。因为 Classloader 只能加载一个类一次,所以使用第一个 MyLogging.class,它的 jar 没有资源。

【讨论】:

  • 这也是我的第一个假设。
  • 有没有办法查明类是否被加载了两次/从不同的位置?
  • 底层的类加载器可能会给你一个提示。尝试((URLClassLoader)MyLogging.class.getClassLoader()).getURLs() 获取从 Classloader 或父 Classloader 加载的 jar 列表。
猜你喜欢
  • 2020-03-19
  • 2018-03-10
  • 1970-01-01
  • 2020-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多