Java "get resource files"在 maven 构建后带来空



我有一个应用程序加载了一些资源日志、属性等...

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>

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

看起来您的资源不在 src/main/resources 目录中,因为您正在访问父目录

../logs/logfile.log

当你说它在构建之前工作正常时,我假设你使用一个IDE运行它,IDE可能会尝试从文件系统访问资源,这样它就可以访问src/main/resources的父目录,在那里它可能会找到logs/logfile.log

但是,您不会在构建过程中包含父目录,因此生成的 jar 中没有此类资源文件。

请注意,两者之间存在差异

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

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

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

尝试

Thread.currentThread().

getContextClassLoader().getResourceAsStream("logs/logfile.log)

最新更新