我需要将应用程序打包为可执行 jar;它的属性文件将位于它之外的同一目录中。最后,我将在文件系统中有类似的东西:
. 应用程序.jar 文件1.properties 文件2.properties
但是,打包后,应用程序无法访问属性文件。经过一些研究,我想我知道是什么原因造成的,但我无法指示 Maven 按我的意愿执行。
我正在使用 maven-assembly-plugin 构建一个 jar-with-dependencies,如下所示:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<index>false</index>
<manifest>
<mainClass>main.Main</mainClass>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
当我尝试运行 jar 时,我得到一个异常,表明 jar 文件之外的属性没有被加载。
在 main.Main 类中,我放置了以下代码,只是为了从 jar 外部测试可访问性:
ClassLoader cl = ClassLoader.getSystemClassLoader();
URL systemResource = ClassLoader.getSystemResource("file1.properties");
System.out.println("File 1 " + systemResource);
systemResource = ClassLoader.getSystemResource("insideJarFile.xml");
System.out.println("insideJarFile.xml " + systemResource);
insideJarFile.xml
是一个打包在 jar 中的文件。这是上面代码的结果:
File 1 null
insideJarFile.xml jar:file:/D:/test/application-jar-with-dependencies.jar!/insideJarFile.xml
研究了几个小时后,我发现原因可能是 INDEX.LIST 文件。我在 7-zip 中打开了 jar 文件,我在 META-INF 文件夹中找到了它。我从 jar 中删除它并再次执行它;结果是:
File 1 file:/D:/test/file1.properties
insideJarFile.xml jar:file:/D:/test/application-jar-with-dependencies.jar!/insideJarFile.xml
问题:我如何告诉 maven 不要创建 INDEX.LIST 文件?我试过<index>false</index>
了,但没有用。
TIA,
FQL