ava.lang.Error: factory already defined java
お問い合わせありがとうございます。
実行時の画面で表示されるメッセージ:java.lang.Error: factory already defined java
生成されるJRAに必須ライブラリをパッケージ
Eclipseの実行可能JARエクスポートではライブラリの処理方法を3種類の中から選択することができます。
* 生成されるJARに必須ライブラリーを抽出 (Extract required libraries into generated JAR)
* 生成されるJARに必須ライブラリーをパッケージ (Package required libraries into generated JAR)
* 生成されるJARの隣のサブフォルダーに必須ライブラリーをコピー (Copy required libraries into a sub-folder next to the generated JAR)
2つ目の「生成されるJARに必須ライブラリーをパッケージ」はEclipse固有の特殊な形式です。 通常、JARファイルの中にJARファイルを入れることはできないのですが、この特殊形式ではJARファイルの中にJARファイルを入れて、同時にEclipseの専用クラスを同梱して独自の方法でJARファイルの中からJARファイルを取り出せるように工夫しています。このEclipse専用クラスがエラーメッセージにも表れている org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.class です。
この JarRsrcLoader.class は exewrap と似た仕組みでURLStreamHandlerを使用して埋め込みJARからリソースを参照する仕組みになっているようです。そのため、exewrapと動作が競合してしまいます。
exewrapを使用する場合は、eclipseの特殊形式JARではなくJavaで一般的に使われている実行可能JAR形式を使用するようにしてください。Eclipseからエクスポート操作をする場合は「生成されるJARの隣のサブフォルダーに必須ライブラリーをコピー (Copy required libraries into a sub-folder next to the generated JAR)」を選択することで、一般的な実行可能JAR形式を作成できます。
先日は、ご親切に対応していただき、ありがとうございました。
また、エラーに遭遇いたしまして、このエラーの対処について、どこを調べれば解決するのでしょうか?
C:\Users\maeda7\Documents\exewrap1.2.3\x64>exewrap -g Snippet78.jar
Architecture: x64 (64-bit)
Target: Java 5.0 (1.5.0.0)
Snippet78.exe (64-bit) version 0.0.0.1
C:\Users\maeda7\Documents\exewrap1.2.3\x64>Snippet78.exe
実行時の画面で表示されるメッセージ:java.lang.Error: factory already defined java
C:\Users\maeda7\Documents\exewrap1.2.3\x64>type Snippet78.log
Missing attributes for JarRsrcLoader in Manifest (Rsrc-Main-Class, Rsrc-Class-Path)
eclipse 上から「実行=>Java アプリケーション」は、問題なし。
エキスポート=>実行可能JARファイル=>軌道構成:Snippet78-Snippet78Prj、ライブらしー処理:生成されるJRAに必須ライブラリをパッケージ
上記で作成したJarファイルのダブルクリックは、問題なし。
eclipseのエキスポートでやるには、設定が足りない所などがあるのでしょうか?
eclipseのバージョンは「Version: Oxygen.2 Release (4.7.2)」です。