アプリケーションを実行可能な jar としてパッケージ化する必要があります。そのプロパティ ファイルは、その外部の同じディレクトリに配置されます。最後に、ファイルシステムに次のようなものがあります。
. app.jar file1.properties file2.properties
ただし、パッケージ化した後、アプリケーションはプロパティ ファイルにアクセスできません。いくつかの調査の結果、何が原因であるかはわかっていると思いますが、Maven に希望どおりに実行するように指示することはできません。
以下に示すように、maven-assembly-plugin を使用して依存関係のある jar を構築しています。
<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 ファイルにある可能性があることがわかりました。jarファイルを7-zipで開いたところ、META-INFフォルダー内に見つかりました。jar 内から削除し、再度実行しました。結果は次のとおりです。
File 1 file:/D:/test/file1.properties
insideJarFile.xml jar:file:/D:/test/application-jar-with-dependencies.jar!/insideJarFile.xml
質問: INDEX.LIST ファイルを作成しないように maven に指示するにはどうすればよいですか? 試してみ<index>false</index>
ましたが、うまくいきませんでした。
ティア、
FQL