JAR文件

时间:2017-10-08 16:20:41

标签: java maven jar

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

我使用Maven 3.5.0和Java 8 Update 144,Eclipse Oxygen。 我还使用maven-assembly-plugin和assembly descriptor 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 package”也不会更新快照。我使用maven程序集插件。

2 个答案:

答案 0 :(得分:0)

您需要在路径的开头添加斜杠。

this.getResourceAsStream('/myFile.properties')

答案 1 :(得分:0)

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

更新2017-10-12

好吧,我想我知道出了什么问题。我需要从我的父目录运行“mvn install”,以便调用子模块A的编译和安装,子模块B作为依赖项引用。然后我可以在子模块B上运行“mvn package”,以获取单个.jar文件中内置的子模块A的最新代码。 :) 终于......