Java“获取资源文件”在Maven构建后带来null

时间:2018-12-21 10:33:45

标签: java maven build resources

我有一个应用程序正在加载一些资源日志,属性等...

URL pathUrl = this.getClass().getResource("../logs/logfile.log");

ClassLoader classLoader = getClass().getClassLoader(); URL pathUrl = classLoader.getResource("../logs/logfile.log");

URL pathUrl = myClass.class.getClassLoader().getResource("../logs/logfile.log");

当我使用Maven将其构建到jar应用程序中时,它会带来null,同时在构建之前可以正常工作。

mvn pom.xml:

 <resources>
       <resource>
           <directory>src/main/resources</directory>
       </resource>
  </resources>

关于构建后如何使其工作的任何想法? 谢谢!

2 个答案:

答案 0 :(得分:1)

由于您正在访问父目录,因此您的资源似乎不在 src / main / resources 目录中

  

../ logs / logfile.log

当您说它在构建之前运行良好时,我假设您使用IDE来运行它,它可能会尝试从文件系统访问资源,因此它可以访问 src / main / resources 的父目录,可以在其中找到 logs / logfile.log

但是,在构建过程中您不包括父目录,因此在最终的jar中没有这样的资源文件。

请注意

this.getClass().getResource("../logs/logfile.log");

还有

getClass().getClassLoader().getResource("../logs/logfile.log");

,因此即使在构建之前,它们都不大可能成功。 (除非您在测试时创建了多个logs / logfile.log文件)

答案 1 :(得分:0)

尝试

Thread.currentThread()。getContextClassLoader()。getResourceAsStream(“ logs / logfile.log)