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

时间:2013-08-27 03:06:22

标签: netbeans ant jar sign

我的网站启动应用程序运行良好,但我意识到我需要将一个lib目录复制到tomcat ROOT目录中,以便我的web启动应用程序正常工作,但我想将所有的jar组合成一个大jar所以我每次更新项目时都需要复制一个文件。我在网上搜索并找到了一个解决方案,将所有罐子组合成一个,然后在下面提到:http://arunasujith.blogspot.com/2011/08/how-to-build-fat-jar-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文件,这在下面提到:{{3 }}

所以我想出了一个脚本[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文件:

&LT 1为卤素;在Netbeans中构建我的项目

&LT 2 - ;在项目的文件视图中右键单击build.xml文件,然后选择Runtarget&gt;&gt;其他目标&gt;&gt;封装成酮罐

&LT 3的密度;在项目的文件视图中右键单击sign_jar.xml文件,然后选择Runtarget&gt;&gt; signjars

现在它按照我的意愿行事:一个签名的大罐子。 但是要实现这一目标需要3个步骤,必须有一个更简单的方法,为什么不能一步完成呢?所以我把上面的文件合并成一个,看起来像这样:

<?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足以解决这个问题,有人可以帮忙吗?

0 个答案:

没有答案