ダウンロードした外部jarに依存する実行可能jarプログラムをビルドしようとしています。私のプロジェクトでは、それらをビルドパスに含め、Eclipse内で実行およびデバッグできます。
Jarにエクスポートしようとすると、プログラムを実行できますが、外部jarからの関数呼び出しとクラスを含むボタンを押そうとするとできません。環境変数(Windows XP)のCLASSPATHを編集して、すべての外部jarのパスを含めましたが、機能しません。
注意すべき点は、実行可能jarのエクスポート中にコンパイル警告が表示されることですが、警告に関する説明は表示されません。
誰かが親切にEclipseを使用して外部jarプログラムを含める方法に関する徹底的なガイドを提供しますか?
Eclipse 3.5には、必要なライブラリを実行可能なjarにパッケージ化するオプションがあります。ファイル->エクスポート...実行可能なjarを選択し、次へをクリックします。実行可能なjarエクスポートウィンドウには、必要なライブラリをjarにパッケージ化することを選択できるラジオボタンがあります。
これを行うには、 jar に対して マニフェストの記述 を使用します。 Class-Path ヘッダーをご覧ください。 Eclipseには、エクスポート時に独自のマニフェストを選択するオプションがあります。
別の方法は、アプリケーションを呼び出すときに依存関係をクラスパスに追加することです。
win32: Java.exe -cp app.jar;dependency.jar foo.MyMainClass
*nix: Java -cp app.jar:dependency.jar foo.MyMainClass
プロジェクトのjarを実行可能なjarに含める方法:
Ubuntu 12.10で実行されているEclipseバージョン3.7.2を使用しています。また、コマンドラインからbuild.xml
を実行し、インポートされた他のjarを使用してjarを作成できるように、ant jar
を作成する方法も示します。
基本的に、ライブラリーをjarにインポートするbuild.xmlを作成するようEclipseに依頼します。
Eclipseを起動し、新しいJavaプロジェクトを作成し、新しいパッケージ「mypackage」を作成し、メインクラスを追加します。Runner
そこにこのコードを配置します。
次に、mysql-connector-Java-5.1.28-bin.jar
Oracleから を含めます。これにより、Javaを記述してMySQLデータベースに接続できます。プロジェクト->プロパティ- > Java build path-> Add External Jar-> pick mysql-connector-Java-5.1.28-bin.jar。
Eclipse内でプログラムを実行します。実行され、ユーザー名/パスワードが無効であることがわかります。これは、Eclipseがjarで適切に構成されていることを意味します。
EclipseでFile
-> Export
-> Java
-> Runnable Jar File
に移動します。次のダイアログが表示されます。
必ず「Antスクリプトとして保存」チェックボックスを設定してください。これが、コマンドラインを使用して後でant jar
を実行できるようにする理由です。
次に、ターミナルに移動して、Antスクリプトを確認します。
Jarを実行しましたが、mysql-connector-Java-5.1.28-bin.jar
の内部に埋め込まれたHello.jar
が見つかったため、エラーは発生しませんでした。
Hello.jarの中を見てください:vi Hello.jar
とcom/mysql/jdbc/stuff.class
への多くの参照が表示されます
これをすべて自動的に行うためにコマンドラインでant jar
を実行するには:buildant.xml
の名前をbuild.xml
に変更し、ターゲット名をcreate_run_jar
からjar
に変更します。
次に、MyProject
内からant jar
と入力し、boomと入力します。 MyProject内にjarファイルがあります。また、Java -jar Hello.jar
を使用して呼び出すことができ、すべて機能します。
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>
Fat-jar拡張機能を試してください。 jar内のすべての外部jarが含まれます。