我正在使用maven创建一个可执行jar,并将以下内容添加到构建部分
下的pom.xml中<build>
.....
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/snmp</directory>
<includes>
<include>**/*</include>
</includes>
</resource>
</resources>
.....
</build>
我使用maven-shade-plugin构建具有依赖关系的jar。
在构建之后运行命令
java -jar jarName
它不会解压缩src / main / snmp目录下的所有文件,由于某种原因它每次都会解压缩一个文件(同一个文件)。但是如果我做的话
jar -xf jarName
这正确地解压缩了一切。
使用可执行jar中的资源需要的其他任何东西吗?
答案 0 :(得分:2)
Java -jar不应该提取任何东西,它应该运行你在清单中声明的任何主要方法。
“使用可执行jar中的资源”是什么意思?如果你的意思是从应用程序中访问类路径上的资源,如果你做得对,它应该可以正常工作 - 但是没有提取。
答案 1 :(得分:1)
命令java -jar jarName.jar
尝试执行jar中的类,其名称由清单中的Main-Class
属性指定。它绝不应该解压缩文件。另一方面,命令jar xf jarname.jar
应该完全相同。
如果使用java -jar
运行程序正在从存档中解压缩,那么这是因为存档中找到的程序是为此而设计的。
答案 2 :(得分:1)
你绝对不想提取JAR来运行它。它应该是独立的。将您的资源放在src / main / resources中,它们将被构建到根目录下的jar中。然后使用Class.getResource()或Class.getResourceAsStream()将其作为类路径资源。
编辑:根据您的评论,我想到的第一件事就是继续将文件打包到您的JAR中,然后在运行时使用File.createTempFile()将它们写入默认临时目录,然后将该目录提供给第三方库使用。您可以使用File.deleteOnExit()进行清理。