gpt4 book ai didi

java - 在 JAR 中加载属性文件?

转载 作者:IT老高 更新时间:2023-10-28 20:22:48 25 4
gpt4 key购买 nike

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

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的基目录下,我不知道如何解决这个问题。

最佳答案

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

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

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

[public] class MyClass {
static
{
...
props.load(MyClass.class.getResourceAsStream("/someProps.properties"));
}
}

关于java - 在 JAR 中加载属性文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2815404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com