我想从maven资源文件夹加载application.properties文件,但getResourceAsStream
返回 null 。这是我的代码:
static {
Properties props = new Properties();
InputStream in = Configuration.class.getResourceAsStream("application.properties");
props.load(in);
}
但InputStream
null 。 Configuration
类位于org.elasticsearch.utils
个包,application.properties
位于src/main/resources
。怎么了?
答案 0 :(得分:1)
从我所看到的,您的设置是正确的。将maven资源文件夹和java文件夹都放在“ main”下完全可以。
我对属性文件的文件名有疑问。我仍然不明白为什么,但是将名称从application.properties
更改为whateverYouWant.properties
后,它突然起作用了。
您是否在pom.xml中启用了对Maven资源的过滤?
<build>
<!--Allows access to maven resources-->
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
这里是Alex Miller Retrieve version from maven pom.xml in code
的指南这是访问Java代码中的属性的完整代码示例(我知道您已经发布了几乎所有内容,但以防万一有人偶然发现这篇文章)
public String getVersionNumber() {
String version = "";
ClassLoader classLoader = getClass().getClassLoader();
final Properties properties = new Properties();
try {
properties.load(classLoader.getResourceAsStream("main.properties"));
version = properties.getProperty("application.version");
} catch (IOException ioException) {
log.log(Level.WARNING, "Version number could not be retrieved from maven resources.");
} catch (NullPointerException nullPointerException) {
log.log(Level.WARNING, "Cannot find .properties file to read version number");
}
return version;
}
答案 1 :(得分:0)
您尝试读取相对于Configuration
类的类路径资源。
src/main/resources/org/elasticsearch/utils
。/application.properties
。答案 2 :(得分:0)
如果文件“application.properties”位于“src / main / resources”下,请使用完整路径(在类加载器的意义上):
的getResourceAsStream( “/ application.properties”)
如果将文件移动到与类相同的包中,则可以使用相对路径:
的getResourceAsStream( “application.properties”)
如果您将文件移至相同的其他包,请使用完整路径:
的getResourceAsStream( “/我/包/名称/ application.properties”)
答案 3 :(得分:0)
@ Jiri的回答也是正确的。
PS:"/config.properties"
也适用于我的例子。但如果这是在ElasticTest类中,那么你应该只使用"config.properties"
。
答案 4 :(得分:-1)
您需要在rsource位置字符串的开头添加/或移动它以匹配包结构或使用类加载器而不是类。
通过类查找资源时,假设资源目录结构反映了您的类结构。
所以你的代码正在寻找资源 的src /主/资源/组织/弹性...