12

外部 jar を必要とする単純な Java プロジェクトがあります。これを 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>

しかし、それはクラスパスのようで、追加の jar を参照できる唯一の場所です。

exe ファイルが作成された後、exe に依存ライブラリが見つからない (exe は winrar で開くことができる) ため、アプリケーションがクラッシュします。

どうすればexeファイルを適切に作成できますか?

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

4

7 に答える 7

16

問題を解決できないことがよくあるので、私はそれをStackOverflowに公開しました...そして質問を公開した直後にアイデアを得ました。

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

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

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

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

  1. http://mavistechchannel.wordpress.com/2010/08/17/how-to-build-a-single-jar-file-with-external-libs/の記事に従って、one-jar- をビルドする ant スクリプトを作成しました。私のためのアプリ。その後、Launch4J を介して手動で exe を作成できます

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

  3. 次に、自動化されたタスクの前に「クリーンとビルド」を行う必要があることに気付きました(ポイント2)/ exeビルドの前にクリーンとビルドを自動的に行うことにしました

すべてをまとめると、ポイント 1、2、3 で構成される ant ビルド スクリプトを添付します。

build.xml を編集して、以下の内容を「project」終了タグの前に配置する必要があります。

<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フォルダーで準備ができています:-)

于 2013-11-12T02:02:36.487 に答える