web-dev-qa-db-ja.com

Launch4J-生成されたexeに依存するjarファイルをアタッチする方法

単純な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ファイルを正しく作成できますか?

ご協力いただきありがとうございます。

11
norbi771

問題を解決できないことがよくあるので、StackOverflowで公開しました...そして質問を公開してすぐにアイデアが浮かびました。

したがって、私の質問に対する答えは次のとおりです。

すべての依存jarを1つのメインjarに入れます。

どうすればそれができるかという情報を見つけるのに少し時間がかかりました。

人々を助けるために、ここで詳細な説明を公開することにしました。それらはNetbeans7.4に基づいています。

  1. http://mavistechchannel.wordpress.com/2010/08/17/how-to-build-a-single-jar-file-with-external-libs/ からの次の記事私は蟻を作成しました私のためにone-jar-appを構築するスクリプト。その後、Launch4Jを介して手動でexeを作成できます

  2. 次に、より自動化されたタスクが必要であると判断し、それを実行しました。Antは(Launch4Jを介して)exeをビルドします。

  3. 次に、自動化されたタスクの前に「クリーンアップとビルド」を実行する必要があることに気付きました(ポイント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フォルダに準備ができています:-)

16
norbi771

.jarをexeに移行するときにも同じ問題が発生しました。また、多くの依存ライブラリもありました。だからこれらは私が実行したステップでした:

  1. Launch4jをダウンロードしてインストールします。

  2. プロジェクトをNetBeansで開きます。プロジェクトをクリーンアップしてビルドします。

  3. プロジェクトディレクトリに「dist」という名前のフォルダがあることを確認してください。これには、libフォルダー(依存ライブラリーを含む)を含むjarファイルが含まれます。
  4. ローンチ4jを開きます。
  5. Distフォルダーに出力ファイルを作成します。例:OutputFile:D:******\My_App\dist\my_application.exe
  6. 次の行でjarファイルを参照します。例:Jar:D:******\My_App\dist\my_application.jar
  7. クラスパスタブに移動します。 CustomClasspathにチェックマークを付けます。参照アイコンを押して、distフォルダーにあるjarファイルを参照します。
  8. [JRE]タブで最小JREバージョンを指定します。
  9. 構成を保存します。
  10. ラッパーを作成します(設定アイコンをクリックして)
  11. Exeファイルはdistフォルダーに生成されます。それでおしまい :)
2
Salman Saleh

私はこの問題に何時間も費やしました。これが私の貢献です。

ここでの問題:.JARプログラムが必要とする外部jarを、生成する.exe内に正常に配置する方法。

次のコマンドを使用して、Eclipse/netbeansおよびALLWORK FINEで外部jarを既に正しく構成していることを前提としています:Java -jaryourprogram.jar。

したがって、本当の問題は、この.EXEファイルに外部jarが含まれていることを確認する方法です。そうしないと、正しく機能しません。

1)まず、Launch4Jやその他のプログラムを忘れる必要があります。

2)JSmoothをインストールします。Windows版を使用することをお勧めします。

3)左側のメニューに「アプリケーション」ボタンがあります。クリックして。

4)「クラスパス」タブが表示されます。プラス(+)をクリックして、外部.jarのファイルを追加します。そしてそれだけです!

「埋め込みjarを使用する」チェックボックスをオンにする.jarアプリケーションを配置し、メインクラスを適切に選択することを忘れないでください。それが動作します。

2
Felipe Volpato
1
Acewin

.jarファイルを変換するとき

  1. クラスパスタブに移動します
  2. カスタムクラスパスを確認する
  3. メインクラスで、プロジェクトをビルドした後、distフォルダーから.jarを選択します
  4. クラスパスtextareaでライブラリを追加し、そのtextareaのすぐ下にライブラリを追加して、ライブラリへのフルパスを書き込みます(もちろん、ライブラリを含みます。つまり、「C:\ folder\lib\file.jar」)。

Example

1
SaFteiNZz

Launch4jで、[クラスパス]タブに移動します。カスタムクラスパスフィールドにチェックマークを付けます。編集フィールドに、含める各jarのフルパスを入力し、[同意する]を押します。終了したら、メインクラスの名前だけを別のフィールド(つまりMyProg)に入力します。これで、すべてのjarファイルがexeに含まれるようになります。

PS私は同じディレクトリにすべてのjarファイルを持っています。バージョン3.12を使用しています

0
MBK

Launch4jに外部ライブラリを含めるには、外部ライブラリの「.jar」ファイルを.exeの近くに配置する必要があります(私のものは同じフォルダーにあります)。次に、「クラスパス」に.jarファイルへのパスを「」に入力します。アイテムの編集: "

0
Kahler Rockwell