webstart 打包批处理

来源:互联网 发布:ubuntu怎么解压tar.Z 编辑:程序博客网 时间:2024/05/22 08:03

为 Web Start 打包需要对包文件进行数字签名,或者是把编写的工程文件都包进一个 jar 里.
打包 -- 测试 -- 改正 -- 打包 -- 测试 这过程反复,让计算机来替代人工操作重复过程是个好主意.

这篇文字举例了如何使用命令行以及命令行输入的重定向来替代重复的操作.具体的工具用法请读者自己找说明.命令行不熟悉,可以参考操作系统上的帮助,文中不对命令行进行解释.

数字签名过程中有密钥生成的输入,可利用命令行的输入重定向来达到自动化的目的.

本文分两种情况来说明如何建立批处理文件来做这样的工作:
1) 把工程中的所有编译后的代码打包进一个 jar (这个 jar 里包含了作为开发包的其他 jar)
2) 对多个 jar 签名

工作环境: Windows 2000 Advanced Server
          WinRar 3.5
          jsdk 1.5.0_12

在进行说明前先介绍下公用的批处理文件.单独介绍这些独立的批处理文件是因为:单个的批处理文件可以方便地被其他批处理文件调用,从编程的观点来看,这些单独的批处理文件就好比是功能单一的"函数"


设置替换变量的批处理文件: setEnvParam.cmd

set JDK_BIN=d:/jdk15/bin
set PROJECT_LIB_PATH=E:/TimingProj/Aenv/lib
set ORIGINAL_LIB_PATH=./originalLib
set SIGNED_LIB_PATH=./signedLib
set AENV_PACK=F:/AenvBuild/aenv.jar


复制文件的批处理文件:copy.cmd

call setEnvParam.cmd
copy /Y %PROJECT_LIB_PATH%/*.jar %ORIGINAL_LIB_PATH%
copy /Y %AENV_PACK% %ORIGINAL_LIB_PATH%

 

情况一: 打包成一个 jar

此种情形就是把工程的 class 文件和作为开发工程用的开发包(*.jar)里的 class 文件打包到同一个jar. 过程是:先把所有 *.jar 解压缩,而后再把这些"散装" class 文件连同工程的 class 文件一起包装到最终的 jar

unZip.cmd

set LIB_PATH=E:/TimingProj/Aenv/lib
set IDEA_PACKED_JAR=F:/AenvBuild/Aenv.jar
for %%N in (%LIB_PATH%/*.jar) do %RAR% x -o+ %%N %CLASSES_PATH%
%RAR% x -o+ %IDEA_PACKED_JAR% %CLASSES_PATH%

此处用了 for 命令来对路径下所有的 jar 解压缩,解压缩的工具使用 Winrar.exe 的命令行方式.
之所以用 Winrar ,是我个人喜好,我觉得 winrar 的命令行比 jar 的命令方便且丰富


再把这些"散装" class 组装进一个 jar

zip.cmd

%RAR% a -r -ep1 %DEPLOY_JAR% %CLASSES_PATH%/

到此,打包成一个 jar 方式的文件操作过程完成,至于数字签名,请继续阅读此文


情况二:保持多个 jar
利用先前的 setEnvParam.cmd 和 copy.cmd 来进行文件操作,不赘述了(用 call xx.cmd 来呼叫指定的批处理工作). 接下来,就是对工程的 class 文件打包,而后就是连同 开发包 jar 一起数字签名
工程编译后的类打包不叙述了.直奔主题看数字签名和 for 命令的使用以及重定向输入


sign.cmd

call setEnvParam.cmd

rem 删除旧的密钥
DEL /Q %ORIGINAL_LIB_PATH%/temp.keystore

rem 创建KEY
%JDK_BIN%/keytool -genkey -keystore %ORIGINAL_LIB_PATH%/temp.keystore -alias tempkeystore < KEY_INFO.lst
%JDK_BIN%/keytool -export -keystore %ORIGINAL_LIB_PATH%/temp.keystore -alias tempkeystore -file %ORIGINAL_LIB_PATH%/aenv.cer < KEY_EXPORT.lst
for %%N in (%ORIGINAL_LIB_PATH%/*.jar) do call selfSign.cmd %%N

红色字就是输入重定向:从文本文件里读每行来"回答"命令行的"问题"(命令行等待的输入其实来自于文件输入流),以换行回车作为回答的提交.KEY_INFO.lst 文件里的"行"就是指:回车并且换行,每一行对应于命令行要求用户的输入

橘黄色的 %%N 是作为 selfSign.cmd 的执行的入口参数,也就是命令行参数

selfSign.cmd
%JDK_BIN%/jarsigner -keystore %ORIGINAL_LIB_PATH%/temp.keystore %1 tempkeystore < KEY_EXPORT.lst

 

使用Ant运行windows的批处理文件

 

       要在Ant内运行一个外部程序,应使用<exec>任务.它允许你执行下列操作:

l         指定程序名和要传入的参数.

l         命名运行目录.

l         使用failonerror标志来控制当应用程序失败时是否停止构建.

l         指定一个最大程序持续时间,时间超过则中止程序.任务在这时被认为是失败,但是至少构建会中止,而不是挂起,这对于自动构建是至关重要的.

l         将输出存到一个文件或特性.

l         指定java调用本地程序时需要预先设定的环境变量.


 


       下面来看一个例子:

批处理文件:

Test.bat

@echo offecho Hello > test.txt
 

 


build.xml

<?xml version="1.0"?><project name="batch" default="extract" basedir=".">    <target name="extract">       <exec executable ="cmd">           <arg line="/c a.bat"/>             </exec>      </target></project>
 

 

       使用executable元素标记指定使用的命令,具体用法可以在命令行下面输入help cmd查看.如果你希望在运行批处理发生错误时中止构建需要设定failonerror="on".加入你的外部程序在某个时刻挂起,也许是在与远程站点对话,而你不希望构建永远被挂起,Ant提供了timeout这个属性,他是一个以毫秒为单位的数字.下面看一下如何使用Ant来运行tomcat.

       启动tomcat需要两个环境变量CATALINA_HOME, JAVA_HOME,如果你在环境变量中已经设定,在Ant中就不需要进行处理,如果没有需要使用<env>属性来设定,你也可以使用<env>属性覆盖你以前的环境变量.

 


<?xml version="1.0"?><project name="batch" default="tomcat-start" basedir=".">    <property name="tomcat.dir" value="C:/Tomcat5"></property>        <target name="tomcat-start">    <exec dir="${tomcat.dir}/bin" executable="cmd">       <env key="CATALINA_HOME" path="${tomcat.dir}"/>       <arg value="/C startup.bat"/>    </exec>    </target></project>
 


 

原创粉丝点击