web-dev-qa-db-ja.com

Eclipse:外部jarを使用して実行可能jarをビルドする方法は?

ダウンロードした外部jarに依存する実行可能jarプログラムをビルドしようとしています。私のプロジェクトでは、それらをビルドパスに含め、Eclipse内で実行およびデバッグできます。

Jarにエクスポートしようとすると、プログラムを実行できますが、外部jarからの関数呼び出しとクラスを含むボタンを押そうとするとできません。環境変数(Windows XP)のCLASSPATHを編集して、すべての外部jarのパスを含めましたが、機能しません。

注意すべき点は、実行可能jarのエクスポート中にコンパイル警告が表示されることですが、警告に関する説明は表示されません。

誰かが親切にEclipseを使用して外部jarプログラムを含める方法に関する徹底的なガイドを提供しますか?

47
Ben

Eclipse 3.5には、必要なライブラリを実行可能なjarにパッケージ化するオプションがあります。ファイル->エクスポート...実行可能なjarを選択し、次へをクリックします。実行可能なjarエクスポートウィンドウには、必要なライブラリをjarにパッケージ化することを選択できるラジオボタンがあります。

36
Bob Tefft

これを行うには、 jar に対して マニフェストの記述 を使用します。 Class-Path ヘッダーをご覧ください。 Eclipseには、エクスポート時に独自のマニフェストを選択するオプションがあります。

別の方法は、アプリケーションを呼び出すときに依存関係をクラスパスに追加することです。

win32: Java.exe -cp app.jar;dependency.jar foo.MyMainClass
*nix:  Java -cp app.jar:dependency.jar foo.MyMainClass
14
McDowell

プロジェクトのjarを実行可能なjarに含める方法:

Ubuntu 12.10で実行されているEclipseバージョン3.7.2を使用しています。また、コマンドラインからbuild.xmlを実行し、インポートされた他のjarを使用してjarを作成できるように、ant jarを作成する方法も示します。

基本的に、ライブラリーをjarにインポートするbuild.xmlを作成するようEclipseに依頼します。

  1. Eclipseを起動し、新しいJavaプロジェクトを作成し、新しいパッケージ「mypackage」を作成し、メインクラスを追加します。Runnerそこにこのコードを配置します。

    enter image description here

  2. 次に、mysql-connector-Java-5.1.28-bin.jarOracleから を含めます。これにより、Javaを記述してMySQLデータベースに接続できます。プロジェクト->プロパティ- > Java build path-> Add External Jar-> pick mysql-connector-Java-5.1.28-bin.jar。

  3. Eclipse内でプログラムを実行します。実行され、ユーザー名/パスワードが無効であることがわかります。これは、Eclipseがjarで適切に構成されていることを意味します。

  4. EclipseでFile-> Export-> Java-> Runnable Jar Fileに移動します。次のダイアログが表示されます。

    enter image description here

    必ず「Antスクリプトとして保存」チェックボックスを設定してください。これが、コマンドラインを使用して後でant jarを実行できるようにする理由です。

  5. 次に、ターミナルに移動して、Antスクリプトを確認します。

    enter image description here

Jarを実行しましたが、mysql-connector-Java-5.1.28-bin.jarの内部に埋め込まれたHello.jarが見つかったため、エラーは発生しませんでした。

Hello.jarの中を見てください:vi Hello.jarcom/mysql/jdbc/stuff.classへの多くの参照が表示されます

これをすべて自動的に行うためにコマンドラインでant jarを実行するには:buildant.xmlの名前をbuild.xmlに変更し、ターゲット名をcreate_run_jarからjarに変更します。

次に、MyProject内からant jarと入力し、boomと入力します。 MyProject内にjarファイルがあります。また、Java -jar Hello.jarを使用して呼び出すことができ、すべて機能します。

8
Eric Leschinski

Ant Script (Eclipseに付属)を使用してJARファイルを生成することをお勧めします。このJAR内には、すべての依存ライブラリを含めることができます。

MANIFESTのClass-pathヘッダーをファイルシステム内のファイルを指すように設定することもできますが、それは良い習慣ではありません。

Ant build.xmlスクリプトの例:

<project name="jar with libs" default="compile and build" basedir=".">
<!-- this is used at compile time -->
<path id="example-classpath">
    <pathelement location="${root-dir}" />
    <fileset dir="D:/LIC/xalan-j_2_7_1" includes="*.jar" />
</path>

<target name="compile and build">
    <!-- deletes previously created jar -->
    <delete file="test.jar" />

    <!-- compile your code and drop .class into "bin" directory -->
    <javac srcdir="${basedir}" destdir="bin" debug="true" deprecation="on">
        <!-- this is telling the compiler where are the dependencies -->
        <classpath refid="example-classpath" />
    </javac>

    <!-- copy the JARs that you need to "bin" directory  -->
    <copy todir="bin">
        <fileset dir="D:/LIC/xalan-j_2_7_1" includes="*.jar" />
    </copy>

    <!-- creates your jar with the contents inside "bin" (now with your .class and .jar dependencies) -->
    <jar destfile="test.jar" basedir="bin" duplicate="preserve">
        <manifest>
            <!-- Who is building this jar? -->
            <attribute name="Built-By" value="${user.name}" />
            <!-- Information about the program itself -->
            <attribute name="Implementation-Vendor" value="ACME inc." />
            <attribute name="Implementation-Title" value="GreatProduct" />
            <attribute name="Implementation-Version" value="1.0.0beta2" />
            <!-- this tells which class should run when executing your jar -->
            <attribute name="Main-class" value="ApplyXPath" />
        </manifest>
    </jar>
</target>
5
Lucas Pottersky

Fat-jar拡張機能を試してください。 jar内のすべての外部jarが含まれます。

2
Marius
0
Moro