0

App.jarわかりました、アプリケーションの実行可能ファイルとして持ってjarいます。worldwind.jarこれは、アプリケーションの機能 ( 3D グローブの提供など) を定義する、さらに多くの jar に依存しています。Class-Path実行可能にする方法の 1 つは、次のように設定された 1 つのフォルダーにすべての jar を提供することMANIFEST.MFです。

Class-Path: .

ただし、すべての jar を 1 つにマージすることをお勧めします。それは可能ですか?

4

3 に答える 3

1

生の答え: jar は基本的に zip ファイルであるため、必要なすべての jar を開いて、コピー先の jar にクラスをコピーするだけです。ただし、今日では通常、maven などのツールに依存関係を処理させます。

于 2013-05-30T12:41:13.657 に答える
0

はい、そうです。

NetBeans を使用している場合は、ここに Ant の簡単な例があります。プロジェクトの build.xml で、このターゲットを追加し、必要に応じて名前を変更します。

これにより、「dist/lib」フォルダー内のすべての jar がプロジェクトの出力 jar とマージされ、「merged」フォルダーに配置されます。

これは、ニーズに合わせて簡単に調整できます。

次に、build.xml ファイルを右クリックし、「ターゲットを実行」、「その他のターゲット」、「マージ」をクリックするだけです。

    <target name="merged" depends="jar">
        <property name="name" value="yourMergedJar"/>
        <property name="dir" value="merged"/>
        <property name="jar" value="${dir}/${name}.jar"/>
        <echo message="Packaging ${application.title} into a single JAR at ${jar}"/>
        <delete dir="${dir}"/>
        <mkdir dir="${dir}"/>
        <jar destfile="${dir}/temp.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="${jar}">
            <zipfileset src="${dir}/temp.jar"
            excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
        </zip>
        <delete file="${dir}/temp.jar"/>
    </target>

編集

他のメンバーが言うように、jar は基本的に zip ファイルであるため、任意の IDE (Ant または Maven を使用) または手動でこれを行うことができます。

于 2013-05-30T12:40:59.620 に答える
0

はい。まさにそのためにMaven shadeプラグインを使用しています。

mvn clean package shade:shade
于 2013-05-30T12:47:47.770 に答える