首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在JAR中加载属性文件?

在JAR中加载属性文件?
EN

Stack Overflow用户
提问于 2010-05-12 08:40:30
回答 1查看 120.5K关注 0票数 65

当我的web应用程序所依赖的某个jar尝试从jar中加载属性文件时,我遇到了问题。这是jar中的代码。

代码语言:javascript
复制
static
{
    Properties props = new Properties();
    try 
    {
        props.load(ClassLoader.getSystemResourceAsStream("someProps.properties"));
    } catch (IOException e) 
    {
        e.printStackTrace();
    }
    someProperty = props.getProperty("someKey");
}

属性文件位于Maven项目的"src/main/resources“目录中。当我在Eclipse的junit测试中运行这段代码时,它执行得很好。当使用Maven将项目构建到jar中,并作为依赖项包含在我的web应用程序中时,它无法找到属性文件。我知道属性文件位于依赖于jar的基目录中,但我不知道如何解决这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-12 08:54:54

问题是您使用的是getSystemResourceAsStream。只需使用getResourceAsStream即可。系统资源从系统类加载器加载,而系统类加载器几乎肯定不是jar在作为webapp运行时加载到的类加载器。

它可以在Eclipse中工作,因为在启动应用程序时,系统类加载器是使用jar配置的,作为其类路径的一部分。(例如,java -jar my.jar将在系统类加载器中加载my.jar。)这不是web应用程序的情况-应用程序服务器使用复杂的类加载来将web应用程序彼此隔离,并与应用程序服务器的内部隔离。例如,请参阅tomcat classloader how-to和所使用的类加载器层次结构图。

编辑:通常,您将调用getClass().getResourceAsStream()来检索类路径中的资源,但是当您在静态初始化器中获取资源时,您将需要显式地命名要从中加载的类加载器中的类。最简单的方法是使用包含静态初始化器的类,例如

代码语言:javascript
复制
[public] class MyClass {
  static
  {
    ...
    props.load(MyClass.class.getResourceAsStream("/someProps.properties"));
  }
}
票数 80
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2815404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档