1

私のWeb Startアプリは正常に動作しましたが、Web Startアプリが機能するためにTomcat ROOTディレクトリにコピーする必要があるlibディレクトリがあることに気付きましたが、すべてのjarを1つの大きなjarに結合したいので、プロジェクトを更新するたびに 1 つのファイルをコピーする必要があります。Web で検索したところ、次の手順ですべての jar を 1 つに結合するソリューションが見つかりました。 using-netbeans.html

build.xml を次のように書き直しました。

<project name="Test_Tool" default="default" basedir=".">
    <description>Builds, tests, and runs the project Test_Tool.</description>
    <import file="nbproject/build-impl.xml"/>
    <target name="package-into-one-jar" depends="jar">

        <property name="store.jar.name" value="Test_Tool"/>

        <!-- don't edit below this line -->
        <property name="store.dir" value="dist"/>
        <property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>

        <echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/>

        <jar destfile="${store.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="${store.jar}"><zipfileset src="${store.dir}/temp_final.jar" excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/></zip>

        <delete file="${store.dir}/temp_final.jar"/>
        <delete dir="${store.dir}/lib"/>
    </target>
</project>

しかし、実行すると、署名されていないファイルがいくつかあり、html ページから実行できないと表示されたので、さらに検索して、jar ファイルに署名する方法を見つけました。 asjava.com/ant/how-do-i-sign-jar-files-in-ant/

そこで、次のようなスクリプト [sign_jar.xml] を作成しました。

<?xml version="1.0"?>
<project name="ant to create keystore and sign jars" default="signjars" basedir=".">
    <tstamp/>

    <property name="build.output.dir"               value="C:/Dir_Test_Tool/dist"/>
    <property name="build.classes.dir"              value="C:/Dir_Test_Tool/dist"/>
    <property name="verisign.key.store"             value="${build.output.dir}/.keystore"/>
    <property name="verisign.key.storepass"         value="asjava.com"/>
    <property name="verisign.key.alias"             value="asjava"/>
    <property name="verisign.key.pass"              value="asjava.com"/>

     <target name="signjars">
        <mkdir dir="${build.output.dir}"/>
        <genkey alias="${verisign.key.alias}" verbose="true" storepass="${verisign.key.storepass}"
                keypass="${verisign.key.pass}" validity="365" keystore="${verisign.key.store}">
               <dname>
                 <param name="CN" value="AsJava.com Group"/>
                 <param name="OU" value="Jim"/>
                 <param name="O"  value="AsJava.com"/>
                 <param name="C"  value="US"/>
               </dname>
        </genkey>
        <signjar jar="${build.classes.dir}/Test_Tool.jar"
                 signedjar="${build.output.dir}/Test_Tool.jar"
                 alias="${verisign.key.alias}"
                 storepass="${verisign.key.storepass}"
                 keystore="${verisign.key.store}"
                 keypass="${verisign.key.pass}"/>
     </target>

</project>

すべての変更後、署名済みの大きな jar ファイルを取得するには、次の手順を実行する必要がありました。

<1> Netbeans でプロジェクトをビルドする

<2> プロジェクトのファイル ビューで build.xml ファイルを右クリックし、Runtarget >> その他のターゲット >> package-into-one-jar を選択します。

<3> プロジェクトのファイル ビューで、sign_jar.xml ファイルを右クリックし、Runtarget >> signjars を選択します。

今では私が望むように動作します:署名された1つの大きな瓶。しかし、それはこれを達成するための 3 つのステップです。もっと簡単な方法があるに違いありません。1 つのステップで実行できないのはなぜですか? したがって、上記のファイルを 1 つに結合すると、次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<project name="Test_Tool" default="default" basedir=".">
    <description>Builds, tests, and runs the project Test_Tool.</description>
    <import file="nbproject/build-impl.xml"/>

    <target name="package-into-one-jar" depends="jar">

        <property name="store.jar.name" value="Test_Tool"/>

        <property name="store.dir" value="dist"/>
        <property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>

        <echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/>

        <jar destfile="${store.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="${store.jar}"><zipfileset src="${store.dir}/temp_final.jar" excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/></zip>

        <delete file="${store.dir}/temp_final.jar"/>
        <delete dir="${store.dir}/lib"/>
    </target>

    <property name="build.output.dir"               value="c:/asjava"/>
    <property name="build.classes.dir"              value="C:/Dir_Test_Tool/dist"/>
    <property name="verisign.key.store"             value="${build.output.dir}/.keystore"/>
    <property name="verisign.key.storepass"         value="asjava.com"/>
    <property name="verisign.key.alias"             value="asjava"/>
    <property name="verisign.key.pass"              value="asjava.com"/>

     <target name="signjars">
        <mkdir dir="${build.output.dir}"/>
        <genkey alias="${verisign.key.alias}" verbose="true" storepass="${verisign.key.storepass}"
                keypass="${verisign.key.pass}" validity="365" keystore="${verisign.key.store}">
               <dname>
                 <param name="CN" value="AsJava.com Group"/>
                 <param name="OU" value="Jim"/>
                 <param name="O"  value="AsJava.com"/>
                 <param name="C"  value="US"/>
               </dname>
        </genkey>
        <signjar jar="${build.classes.dir}/Test_Tool.jar"
                 signedjar="${build.output.dir}/Test_Tool.jar"
                 alias="${verisign.key.alias}"
                 storepass="${verisign.key.storepass}"
                 keystore="${verisign.key.store}"
                 keypass="${verisign.key.pass}"/>
     </target>
</project>

しかし、奇妙なことに、src の下にあるすべてのコンパイル済みディレクトリが dist にコピーされます。それらを削除すると、結果として大きな jar が実行されなくなります。上記の 3 つの手順を 1 つに正しく結合するのに十分な ant がわかりません。この問題を解決するのに十分な Netbeans の知識がありません。誰か助けてもらえますか?

4

0 に答える 0