【问题标题】:Use a resource from a jar file?使用 jar 文件中的资源?
【发布时间】:2011-06-27 21:42:05
【问题描述】:

我正在尝试使用我打包在 jar 文件中的 XML 资源文件(我们称之为 wrapper.jar)

我发现this other thread非常有用,但我偶然发现了另一个问题。 Within resources in JAR

我的jar文件内容如下:

wrapper.jar:
/META-INF
/org
    /ihe
    axis2.xml

当我在类 org.ihe.consumer.Foo 构造函数中尝试这个时

java.net.URL xmlURL = getClass().getClassLoader().getResource("axis2.xml");

我从“手表”中得到这个:

jar:file:/C:/Users/JROSE-HP/.m2/repository/org/apache/axis2/axis2-kernel/1.5.4/axis2-kernel-1.5.4.jar!/axis2.xml

我不明白为什么它会尝试从默认的axis2 jar而不是我的jar中获取xml文件...与axis-kernel-1.5.4.jar存在依赖关系。

但是如何从 wrapper.jar 中获取 XMl 文件?

谢谢

【问题讨论】:

  • 您需要提供资源的完整路径。如果有多个文件具有相同的路径,则类路径的顺序很重要。返回找到的第一个条目。
  • 好的,我明白了,我在其他地方有相同的资源名称。

标签: java resources jar dependencies load


【解决方案1】:

您需要在 jar 中指定路径:

java.net.URL xmlURL = getClass().getClassLoader().getResource("org/ihe/axis2.xml");

【讨论】:

  • 我在我的依赖项目中删除了axis2.xml资源,该项目也有/org/axis2.xml!现在它正在加载正确的。
  • 只是想知道,“默认”当前 URI,它总是根包吗?
  • 我不明白你对“默认”的确切含义,但是资源是从类路径中以相同方式访问的,因为类是从那里加载的。资源的路径用斜线而不是点分隔。因此,如果您在不同的 jar 中有两个具有相同路径的资源,则将返回 classloader 找到的第一个资源。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-28
  • 1970-01-01
  • 2016-12-28
  • 2018-11-24
  • 2012-04-26
  • 2018-03-29
相关资源
最近更新 更多