我有一个应用程序加载了一些资源日志、属性等...
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)