2011-08-05 13 views
2

jarファイルに含まれる他のjarファイル(B.jar)に依存する実行可能なjarファイル(A.jar) jarinjarloaderを介してアクセスします。そのコードが別のjarファイルのjarファイルからプロパティファイルを取得しようとしています

InputStream inStream = <Class>.getClassLoader().getResourceAsStream(propFile); 

を呼び出したときに、これは、これらのjarファイル内のJavaコードにアクセスするために動作しますが、それはB.jarに含まれるプロパティファイルを見つけることができません。このコードはEclipseで動作するときに機能するので、正しいプロパティファイルがあることがわかります。

A.jarを抽出してからB.jarを抽出して結合ファイルを圧縮してみましたが、これはうまくいきません。マニフェストファイルを見てみると、メインクラスがあるorg.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader

は、私がマニフェストファイルに作ることができるいくつかの変化(例えば、Rsrcのクラスパスに何かを追加する)ことがありますこれはうまくいくでしょうか? Rsrc-Class-Pathにはすでに "./"が含まれていますが、これはプロパティローダに自分のプロパティファイルが表示されないことは明らかです。

TIA、

グレッグ

+0

ああ、IDEがビルドを管理してしまう危険性があります。あなたはjarinjarloaderを使う必要がありますか? – Paul

+0

他の15種類のjarファイルを含む実行可能なjarをビルドする別の方法を教えていただけたら、それを聞いて非常にうれしいです。それがなければ、私はjarinjarloaderを使う必要があります。 –

+0

1つの瓶をお届けする必要がありますか?もしそうなら、C.ラムゼイアの答えは良いものです。そこに私のコメントも見てください。 – Paul

答えて

1

は、Eclipseは私が逃した設定がありますが判明します。 実行可能JARファイル」をエクスポートすると、「必要なライブラリを抽出してJARに抽出」を選択できます。これはいくつかのライセンスの問題を引き起こしているかもしれませんが(マージしているJARに依存します)、私の場合は魅力的に働いていました。実際に働いていた瓶)。

2

私はまた、ネストされた瓶の周囲で作業をお勧めしたいです。私は通常それにアンパックすべてのライブラリで1つのjarファイルを構築するために、私のbuild.xmlに次の操作を行います。

<target name="fatjar" depends="compile"> 
    <jar destfile="${isamjar}" filesetmanifest="mergewithoutmain"> 
      <manifest> 
        <attribute name="Main-Class" value="com.xyz.Main"/> 
        <attribute name="Class-Path" value="."/> 
      </manifest> 
      <fileset dir="./bin"/> 
      <fileset dir="." includes="src/**"/> 
      <zipfileset excludes="META-INF/*.SF" src="${l}/derby.jar"/> 
      <zipfileset excludes="META-INF/*.SF" src="${l}/jconn3.jar"/> 
      <zipfileset excludes="META-INF/*.SF" src="${l}/log4j-1.2.9.jar"/> 
      <zipfileset excludes="META-INF/*.SF" src="${l}/${jar4j}"/> 
    </jar> 

+0

オープンソースプロジェクトである「One-JAR」(http://one-jar.sourceforge.net/)もあります。「...アーカイブ内のjarからクラスやリソースをロードする方法を知っているカスタムクラスローダーを提供していますファイルシステムのjarファイルではなく、 – Paul

関連する問題