2011-07-25 13 views
4

コマンドラインから実行可能なjarを作成しようとしています。 JARのメインクラスには、別のプレーンなJARファイルにパッケージされている依存関係があります。コマンドラインから実行可能なJAR(ÜberJAR)とJARの依存関係を束ねる

単一のJARファイルを出荷するために、依存関係JARを実行可能なJARとともにパッケージ化したいとします。

public class Hello { 
    public String getHello() { 
     return "Well hello there!!"; 
    } 
} 

私はクラスファイルをパッケージ化しているhello.jarへの使用:

依存Hello.classファイルモックコードを持っている:私はこれまで試してみました何

は以下があります

jar cvfM hello.jar Hello.class 

hello.jar内容は以下のようになります。

私は、次の内容のマニフェストファイル manifest.txtを作成

public class Main { 
    public static void main(String[] args) { 
     System.out.println(new Hello().getHello()); 
    } 
} 

:0

hello.jar -+- Hello.class 

今私はモックコードでメインクラス持っ

Main-Class: Main 
Class-Path: hello.jar 

を私は今作成実行可能なJARを使用します。

jar cvfm main.jar manifest.txt Main.class hello.jar 

main.jar内容は以下のようになります。

使用して実行可能なJARを実行する
main.jar -+- Main.class 
      | 
      +- hello.jar 
      | 
      +- META-INF -+- MANIFEST.MF 

java -jar main.jar 

を私はこんにちはクラスの依存関係のためのクラスローダエラーが発生します。これは、クラスローダーがhello.jarと同じパスにあるmain.jarを検索するためです。だから私がのコピーを入れたらhello.jarと一緒にmain.jar私はそれを実行することができます。

main.jar hello.jarを内部で実行できるようにするには、何が必要ですか?

私はあなたが「このようにしているのはなぜですか?」と尋ねることを知っています。私は、pplがEclipse、Ant、Mavenまたはこれを行うための他のツールを主に使用していることを知っています。しかし、ちょうど私をユーモアしてください:)

答えて

0

これを行う簡単な方法はありません。つまり、jarファイルをjarファイル内に入れたい場合は、独自のクラスローダーを作成する必要があります。

既にサポートしている製品がいくつかあります。 One-Jarは私が多くの成功を収めたものの1つで、簡単にスクリプト化することができます。

はここで全体のトピックに関する興味深いSOの議論である -

Easiest way to merge a release into one JAR file

0

まあ、私はあなたがjarファイル生成バグに直面することができると信じています。 this linkをチェックしてください、それはあなたを啓蒙するかもしれません。

ティーザー:私の知る限り承知のように

、そして私自身の試みに基づいて、埋め込まれたjarファイルにクラスローダ 表情を作るクラスパスを指定する 方法はありません。説明については、前の段落 を参照してください。

そのためには、次のリンクのいずれかをチェックすることがあります。 classpath-including-jar-within-a-jarjava-easiest-way-to-merge-a-release-into-one-jar-file

乾杯を!

4

あなたのアプローチは残念ながら完全に間違っています。 瓶を置くための「通常の」方法はありませんの別の瓶です。だからあなたのhello.jarはmain.jarの中で何もしません!ポイントは、 "通常の"クラスローダーはjarファイル内のjarファイルを探しません。したがって、クラスが見つかりませんエラーが発生します。 しかし:あなたがdesparetlyそれを行うには、 "OneJar"のgoogleをご希望の場合はhttp://one-jar.sourceforge.net/

に行く
関連する問題