単純なJavaプロジェクトがあり、外部jarが必要です。これをnetbeansでビルドし、Clean and Buildコマンドを実行すると、distディレクトリに次の構造が見つかります。
-myApp.jar
-lib/
library1.jar
library2.jar
典型的な、私は言うでしょう。
ここで、依存ライブラリを含むmyApp.jarを1つのexeとして配布したいと思います。これは可能ですか? Launch4Jを使おうとしています。設定ファイルを作成するGUIで、cpセクションにいくつかのオプションがあります
<cp>lib/swing-layout-1.0.4.jar</cp>
しかし、それはクラスパスのようであり、それは私が私の余分な瓶を参照できる唯一の場所です。
Exeファイルを作成した後、exe内に依存ライブラリが見つからないため(exeはwinrarで開くことができます)、アプリケーションがクラッシュします。
どうすればexeファイルを正しく作成できますか?
ご協力いただきありがとうございます。
問題を解決できないことがよくあるので、StackOverflowで公開しました...そして質問を公開してすぐにアイデアが浮かびました。
したがって、私の質問に対する答えは次のとおりです。
すべての依存jarを1つのメインjarに入れます。
どうすればそれができるかという情報を見つけるのに少し時間がかかりました。
人々を助けるために、ここで詳細な説明を公開することにしました。それらはNetbeans7.4に基づいています。
http://mavistechchannel.wordpress.com/2010/08/17/how-to-build-a-single-jar-file-with-external-libs/ からの次の記事私は蟻を作成しました私のためにone-jar-appを構築するスクリプト。その後、Launch4Jを介して手動でexeを作成できます
次に、より自動化されたタスクが必要であると判断し、それを実行しました。Antは(Launch4Jを介して)exeをビルドします。
次に、自動化されたタスクの前に「クリーンアップとビルド」を実行する必要があることに気付きました(ポイント2)/ exeビルドの前にクリーンアップとビルドを自動的に実行することにしました
すべてをまとめると、ポイント1、2、3で構成されるAntビルドスクリプトを添付しています。
Build.xmlを編集し、以下のコンテンツを「プロジェクト」終了タグの前に配置する必要があります
<target name="package-for-launch4j" depends="clean,compile,jar">
<property name="launch4jexe.dir" location="C:\Program Files (x86)\Launch4j" />
<taskdef name="launch4j"
classname="net.sf.launch4j.ant.Launch4jTask"
classpath="${launch4jexe.dir}/launch4j.jar
:${launch4jexe.dir}/lib/xstream.jar" />
<property name="launch4j.jar.name" value="MyAppJarName"/>
<property name="launch4j.dir" value="exe"/>
<property name="launch4j.jar" value="${launch4j.dir}/${launch4j.jar.name}.jar"/>
<echo message="Packaging ${application.title} into a single JAR at ${launch4j.jar}"/>
<delete dir="${launch4j.dir}"/>
<mkdir dir="${launch4j.dir}"/>
<jar destfile="${launch4j.dir}/temp_final.jar" filesetmanifest="skip">
<zipgroupfileset dir="dist" includes="*.jar"/>
<zipgroupfileset dir="dist/lib" includes="*.jar"/>
<manifest>
<attribute name="Main-Class" value="${main.class}"/>
</manifest>
</jar>
<Zip destfile="${launch4j.jar}">
<zipfileset src="${launch4j.dir}/temp_final.jar"
excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
</Zip>
<delete file="${launch4j.dir}/temp_final.jar"/>
<launch4j configFile="misc/l4j-myapp.xml" />
</target>
次に、Netbeansでbuild.xmlを右クリックし、「ターゲットの実行」/「その他のターゲット」/「package-for-launch4j」を選択します。
exeファイルはexeフォルダに準備ができています:-)
.jarをexeに移行するときにも同じ問題が発生しました。また、多くの依存ライブラリもありました。だからこれらは私が実行したステップでした:
Launch4jをダウンロードしてインストールします。
プロジェクトをNetBeansで開きます。プロジェクトをクリーンアップしてビルドします。
私はこの問題に何時間も費やしました。これが私の貢献です。
ここでの問題:.JARプログラムが必要とする外部jarを、生成する.exe内に正常に配置する方法。
次のコマンドを使用して、Eclipse/netbeansおよびALLWORK FINEで外部jarを既に正しく構成していることを前提としています:Java -jaryourprogram.jar。
したがって、本当の問題は、この.EXEファイルに外部jarが含まれていることを確認する方法です。そうしないと、正しく機能しません。
1)まず、Launch4Jやその他のプログラムを忘れる必要があります。
2)JSmoothをインストールします。Windows版を使用することをお勧めします。
3)左側のメニューに「アプリケーション」ボタンがあります。クリックして。
4)「クラスパス」タブが表示されます。プラス(+)をクリックして、外部.jarのファイルを追加します。そしてそれだけです!
「埋め込みjarを使用する」チェックボックスをオンにする.jarアプリケーションを配置し、メインクラスを適切に選択することを忘れないでください。それが動作します。
私を助けてくれた場所のさまざまなリンクを置く
1つの実行不可能なjar内にすべての依存するjarを含める方法は?
Mavenを使用して依存関係のある実行可能JARを作成するにはどうすればよいですか?
http://www.mkyong.com/Java/how-to-make-an-executable-jar-file/
最も重要な
http://docs.Oracle.com/javase/tutorial/deployment/jar/manifestindex.html
クイックツット
http://www.mkyong.com/Java/how-to-add-your-manifest-into-a-jar-file/
Launch4jで、[クラスパス]タブに移動します。カスタムクラスパスフィールドにチェックマークを付けます。編集フィールドに、含める各jarのフルパスを入力し、[同意する]を押します。終了したら、メインクラスの名前だけを別のフィールド(つまりMyProg)に入力します。これで、すべてのjarファイルがexeに含まれるようになります。
PS私は同じディレクトリにすべてのjarファイルを持っています。バージョン3.12を使用しています
Launch4jに外部ライブラリを含めるには、外部ライブラリの「.jar」ファイルを.exeの近くに配置する必要があります(私のものは同じフォルダーにあります)。次に、「クラスパス」に.jarファイルへのパスを「」に入力します。アイテムの編集: "