2012-03-22 28 views
0

したがって、多くのjarファイルに依存する別のjarファイルに依存するmainメソッドを持つ1つのクラスを作成しました。簡単にするために、私はOne-JARを使い、単一の実行可能なjarファイルを作成しました。私が作成した jarファイルは、私はそれを実行することができました、結構です:EclipseはOne-JARで作成したjarを認識しません

java -jar foo.jar 

これが成功した私のメインのアプリケーションを実行します。

次に、私はEclipseで新しいプロジェクトを作成し、foo.jarを「外部jarの追加」(私はずっとやっていますが、いつも動作します)を経由して構築パスに追加しました。なんらかの理由で、私のEclipseプロジェクトでは、foo.jarからのパッケージのインポートを認識しないという不満があります。

私はEclipseでのjar問題に関する以前の質問を見ましたが、何も助けませんでした。私はそれがOne-Jarが作成するツリーとは関係があると思うが、コマンドラインからの "java -jar foo.jar"はうまく動作するので、Eclipseがクラスファイルを見ない理由を理解できない。

ありがとうございます!メイン内

META-INF  OneJar.class com   doc   lib   main 

更新:ワンジャーのように見えることで ここに私のfoo.jarを作成した方法です

main  main.jar 

内部が持つ自分のアプリケーションのこの主なパッケージツリー。クラスファイル。今、私がEclipseに "main.jar"を含めると、私のアプリケーションを認識します。しかし、それはlib /の下の他の依存関係を認識しないので、実行時例外をスローします。

更新2: One-jarとEclipseの問題は解決されていませんが、誰かがfat jar Eclipseプラグインに言いましたので、試してみました。それが生成したjarファイルは、EclipseとMavenの両方で動作しました。彼らは実際にOne-Jarもサポートします.Jarを作成するときにOne-Jarオプションをチェックすることができます。私はそれを使用しませんでしたが、そこにあります(ライブラリの競合を処理する必要があるため実際に使用する価値がある場合)。 助けてくれてありがとう。

+0

ワンジャーが作成するジャーは、クラスが入ったジャーです。 –

+0

右。しかし、私のパッケージがcom.example.mainであるとしましょう。次に、.classファイルをmain/main/com/example/main/ – user247866

+1

の下に置きます。シェーディングの仕方と同じように、矛盾を避けるためにそうしていると思います。ワンジャーが非マンギングのオプションを持っているかどうかはわかりません。 –

答えて

0

Eclipseはjarファイル内のjarファイルを認識しません。別のパスを構築するには、他のjarファイルをインクルードすることをお勧めします。

+0

foo.jarとmain.jarをコンパイルしましたが、他のjars依存関係のため実行時には動作しませんでした。私は他のすべての瓶を別々に追加できますが、それはうまくいくでしょうが、私はそれを避けようとしています。これが私がOne-Jarを使用している理由です。One-JarはEclipseのようなコマンドで動作しますが、動作しません。 – user247866

+0

あなたがそれを避けたいと思う理由は何ですか?それはビルドパスに従属するjarを追加する通常の方法であるためです。すべてを1つのjarファイルにまとめたい場合は、すべてのクラスファイルを解凍して1つのjarファイルにまとめることができます。それは愚かな音かもしれない:)。しかし、私は他の方法を考えることができませんでした。 – tsatiz

+1

単一の瓶で作業する方が便利で、他の人にそれを輸送する方がはるかに簡単です。また、One-Jarは依存関係の競合を解決する必要があります(例えば、私のアプリケーションはコモンズライブラリ3.4を使用し、依存するライブラリの1つはコモンズ2.4を使用します)。 One-Jarはこれを陰にすることができます。 – user247866

関連する問題