java -jar jarname不解压缩所有资源文件

时间:2011-09-18 00:21:00

标签: java maven jar

我正在使用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中的资源需要的其他任何东西吗?

3 个答案:

答案 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()进行清理。