繁体   English   中英

JAR文件中带有getResourceAsStream()的FileNotFoundException

[英]FileNotFoundException with getResourceAsStream() in JAR file

我不知道该怎么办了。 尝试从可运行的.jar文件执行程序时,尝试使用getResourceAsStream()读取.properties文件时,出现FileNotFoundException异常。

我使用Maven 3.5.0和Java 8 Update 144,Eclipse Oxygen。 我还使用maven-assembly-plugin和程序集描述符jar-with-dependencies来生成单个.jar文件。

属性文件位于/ src / main / resources(在Eclipse中),因为它是Maven的约定。 然后,在构建.jar文件时,它会自动放入.jar文件的根目录中。

在Eclipse中运行程序时,效果很好。 我只是为getResourceAsStream()方法提供属性文件的名称,而不提供其他斜杠(/)或其他任何内容。 我查看了.jar文件,发现该文件直接位于.jar文件的根目录中。

为什么找不到.properties文件? 我就是不明白。

更新2017-10-12

我发布了一个答案并认为它可以工作,但是它似乎可以工作,因为我更改了版本字符串并附加了“ -SNAPSHOT”,但是从那时起,我的子模块就没有更新。 我知道我只需要附加文字“ -SNAPSHOT”,Maven就可以重新编译在Eclipse中更改的当前代码并将其放入我的.jar文件中。 但事实并非如此。

Maven开始让我很烦。 它应该像这样工作。 现在到底出了什么问题?

顺便说一句,应该强制更新的“ mvn clean -U软件包”也不会更新快照。 我使用了Maven程序集插件。

您需要在路径的开头加上斜线。

this.getResourceAsStream('/myFile.properties')

找到了解决方案。 我没有在Maven中使用SNAPSHOT版本。 事实证明,我需要为标签使用“ [版本号] -SNAPSHOT”,以便Maven始终使用当前最新的代码进行构建。 现在可以了。 :)

更新2017-10-12

好吧,我想我知道出了什么问题。 我需要从父目录运行“ mvn install”,以调用子模块A所引用的子模块A的编译和安装。 然后,我可以在子模块B上运行“ mvn软件包”,以将子模块A的最新代码构建到单个.jar文件中。 :)最后...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM