実行可能 jar にパッケージ化したい Maven プロジェクトがあります。春など、かなりの数の依存関係を使用しています。多くの頭痛の種を避けるために、OneJar を使用することがいくつかの投稿で提案されました。これは私が現在pom.xmlに持っているものです:
<plugin>
<groupId>org.dstovall</groupId>
<artifactId>onejar-maven-plugin</artifactId>
<version>1.4.4</version>
<executions>
<execution>
<configuration>
<mainClass>com.cool.project.Application</mainClass>
<onejarVersion>0.97</onejarVersion>
<attachToBuild>true</attachToBuild>
<classifier>coolproject</classifier>
</configuration>
<goals>
<goal>one-jar</goal>
</goals>
</execution>
</executions>
</plugin>
私の Spring 構成では、クラスの 1 つでリソース ( src/main/resources/coolfile.bin
) パスを外部ライブラリ (jsch) メソッドに渡す必要があります。
String resource = ConfigurationClass.class.getClassLoader().getResource("coolfile.bin").getFile();
jsch.addIdentity(resource);
IDE (Eclipse) から実行するとApplication.java
、アプリケーション全体が正常に読み込まれます。
を実行するmvn clean install
とonejar jarがtarget
フォルダーの下に構築されますが、実行しようとするとjava -jar coolproject.one-jar.jar
次のエラーが表示されます。
...
Caused by: java.io.FileNotFoundException: file:/target/coolproject.one-jar.jar!/main/coolproject.jar!/coolfile.bin (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:97)
at com.jcraft.jsch.IdentityFile.newInstance(IdentityFile.java:83
を調べると、フォルダーcoolproject.one-jar.jar
のcoolproject.jar
下に がmain
あり、それを調べると、coolfile.bin
そのルートにあることがわかります。
理論的には、リソースを見つける必要がありますか? 私は何が欠けていますか?