如何将ant build.xml中的3个步骤合并为一个步骤,以便Netbeans生成一个签名的jar在web start中运行?

如何将ant build.xml中的3个步骤合并为一个步骤,以便Netbeans生成一个签名的jar在web start中运行?,netbeans,ant,jar,sign,Netbeans,Ant,Jar,Sign,我的web start应用程序运行得很好,但我意识到有一个lib目录需要复制到tomcat根目录中,这样我的web start应用程序才能工作,但我只想将所有jar合并到一个大jar中,所以每次更新项目时我只需要复制一个文件。我在网上搜索,找到了一个将所有JAR合并为一个JAR的解决方案,其中包括以下步骤,在: 我重写了build.xml,如下所示: <project name="Test_Tool" default="default" basedir="."> <de

我的web start应用程序运行得很好,但我意识到有一个lib目录需要复制到tomcat根目录中,这样我的web start应用程序才能工作,但我只想将所有jar合并到一个大jar中,所以每次更新项目时我只需要复制一个文件。我在网上搜索,找到了一个将所有JAR合并为一个JAR的解决方案,其中包括以下步骤,在:

我重写了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>
<?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>
<?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>

构建、测试和运行项目测试工具。

所以我想出了一个脚本[sign_jar.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>
<?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>
<?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>

在所有更改之后,我需要执行以下操作以获取签名的大jar文件:

在Netbeans中构建我的项目

在项目的文件视图中,右键单击build.xml文件,然后选择Runtarget>>其他目标>>打包到一个jar中

在项目的文件视图中,右键单击sign_jar.xml文件,然后选择Runtarget>>signjars

现在它如我所愿工作:一个签名的大罐子。 但这是三个步骤,为了实现这一点,必须有一个更简单的方法,为什么不能一步完成呢?因此,我将上述文件合并为一个文件,如下所示:

<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>
<?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>
<?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将无法运行,我不知道ant是否能够正确地将上述3个步骤组合成一个,也不知道Netbeans是否能够解决这个问题,有人能帮我吗