今天是比较郁闷的一天一不小心把eclipse的一个jme项目中的verified/classes目录中的东东删除了之后才发现eclipse是如何惩罚我的它再也不会在这个目录中生成class了呵呵罢工了我的工
为什么eclipse不是想netbeans那样用ant来编译运行jme项目那??好在本人目前正在研究ant呵呵小试牛刀地用了小时做了个比较完善的ant脚本可以来弥补一下eclipse对我心情的打击了
下面我把这个脚本和源程序(含demo)贡献出来大家一起研究探讨
完成以下功能:
建立基本目录框架
编译src目录中的源文件
调用preverifyexe对类文件进行验证
将类文件生成jar包
调用proguard类对jar包进行混淆并解压缩
将经过混淆解压缩后的类资源文件生成jar包复制src目录中的jad文件完成程序部署
调用emulator运行程序
用法
只需要修改一下CONFproperties文件中的属性
midplibdirWTK的lib目录路径(位于CONFproperties文件中)
midplibpath根据需要扩展使用的jar(位于CONFproperties文件中)
programName生成jar/jad文件的名字
在本脚本中可修改的地方:
preverifyexe和emulatorexe的具体参数可以根据需要修改
注意:
src目录中需要有MANIFESTMF和${programName}jar文件这些将用在生成jar和部署程序时
res目录中放置使用的png图片文件
附加类库
混淆器类Proguard位于lib中
文件说明:
CONFproperties:配置属性文件
GENproperties:生成MANIFESTMF和${programName}jad文件的替换属性文件
JADtmp:生成jad文件用到的替换模板文件
MANIFESTtmp:生成MANIFESTMF文件用到的替换模板文件
<?xml version= encoding=GBK?>
<project name=automake default=end basedir=>
<property file=CONFproperties/>
<property name=srcdir value=${basedir}\src/>
<property name=resdir value=${basedir}\res/>
<property name=builddir value=${basedir}\build/>
<property name=deploydir value=${basedir}\deploy/>
<property name=packagedir value=${basedir}\package/>
<property name=packageextractdir value=${packagedir}\extract/>
<property name=preverifieddir value=${basedir}\preverified/>
<property name=preverifiednoObfusedClassdir value=${preverifieddir}\noObfused\classes/>
<property name=preverifiedobfusedClassdir value=${preverifieddir}\obfused\classes/>
<property name=preverifybin value=${wtkhomedir}\bin\preverifyexe/>
<property name=emulatorbin value=${wtkhomedir}\bin\emulatorexe/>
<property name=proguardlibdir value=${basedir}\lib/>
<property name=jadfile value=${programName}jad/>
<target name=init description=初始化环境>
<echo message=初始化目录/>
<delete dir=${builddir}/>
<delete dir=${deploydir}/>
<delete dir=${packagedir}/>
<delete dir=${preverifieddir}/>
<mkdir dir=${builddir}/>
<mkdir dir=${deploydir}/>
<mkdir dir=${packagedir}/>
<mkdir dir=${packageextractdir}/>
<mkdir dir=${preverifieddir}/>
<mkdir dir=${preverifiednoObfusedClassdir}/>
<mkdir dir=${preverifiedobfusedClassdir}/>
</target>
<target name=complie depends=init description=编译>
<echo message=编译程序/>
<javac srcdir=${srcdir} destdir=${builddir}>
<bootclasspath path=${midplibdir}/>
<classpath>
<fileset dir=${midplibdir} includes=*jar/>
</classpath>
</javac>
</target>
<target name=verifyForNoObfuscate description=验证jme的class将验证后的class输出到${preverifiednoObfusedClassdir}>
<echo message=验证生成的class将验证后的class输出到${preverifiednoObfusedClassdir}/>
<exec executable=${preverifybin} searchpath=false>
<arg line=classpath ${midplibpath}/>
<arg line=d ${preverifiednoObfusedClassdir}/>
<arg line=${builddir}/>
</exec>
</target>
<target name=genManifest description=根据模板属性文件的值生成Manifest文件>
<echo message=根据模板属性文件的值生成Manifest文件/>
<!
使用${programName}替换掉属性文件GENproperties中的@PROGRAMNAME@
>
<replace file=GENproperties
token=@PROGRAMNAME@
value=${programName}
/>
<!
使用GENproperties文件中的属性值替换掉模板文件MANIFESTtmp中的对应属性值
将替换后的数据复制到${srcdir}\MANIFESTMF
>
<copy file=MANIFESTtmp
tofile=${srcdir}\MANIFESTMF>
<filterset begintoken=@ endtoken=@>
<filtersfile file=GENproperties/>
</filterset>
</copy>
</target>
<target name=package description=将class打包输出到${packagedir}>
<echo message=将class打包输出到${packagedir}/>
<jar basedir=${preverifiednoObfusedClassdir}
jarfile=${packagedir}\${programName}noObfusedjar
manifest=${srcdir}\MANIFESTMF>
<fileset dir=${resdir} includes=**/*png/>
</jar>
</target>
<target name=obfuscate description=对打包后的jar文件进行混淆然后解压缩至${packageextractdir}><echo message=对打包后的jar文件进行混淆然后解压缩至${packageextractdir}/>
<java fork=true classname=proguardProGuard>
<classpath path=${proguardlibdir}\proguardjar/>
<arg line=libraryjars ${midplibpath}/>
<arg line=injar ${packagedir}\${programName}noObfusedjar/>
<arg line=outjar ${packagedir}\${programName}obfusedjar/>
<!保留MIDlet的类声明不被混淆>
<arg line=keep public class * extends javaxmicroeditionmidletMIDlet/>
<!打印被保留的类名>
<arg line=printseeds/>
</java>
<unjar src=${packagedir}\${programName}obfusedjar
dest=${packageextractdir}/>
</target>
<target name=verifyForObfuscate description=验证被混淆的class输出到${preverifiedobfusedClassdir}>
<echo message=验证被混淆的class输出到${preverifiedobfusedClassdir}/><exec executable=${preverifybin} searchpath=false>
<arg line=classpath ${midplibpath}/>
<arg line=d ${preverifiedobfusedClassdir}/>
<arg line=${packageextractdir}/>
</exec>
<copy todir=${preverifiedobfusedClassdir}>
<fileset dir=${packageextractdir} includes=**/*png/>
</copy>
</target>
<target name=deploy description=将经过验证的混淆后的class打包部署在delpoy目录>
<echo message=将经过验证的混淆后的class打包部署在${deploydir}目录/>
<jar basedir=${preverifiedobfusedClassdir}
jarfile=${deploydir}\${programName}jar
manifest=${srcdir}\MANIFESTMF
>
<fileset dir=${preverifiedobfusedClassdir} includes=**/*class;*png/>
</jar>
</target>
<target name=genJad description=在${deploydir}目录生成JAD文件>
<echo message=在${deploydir}目录生成JAD文件/>
<length file=${deploydir}\${programName}jar property=jarsize/>
<echo message=获得jar文件长度:${jarsize}/>
<replace file=GENproperties
token=@JARSIZE@
value=${jarsize}
/>
<replace file=GENproperties
token=@PROGRAMNAME@
value=${programName}
/>
<copy file=JADtmp tofile=${deploydir}\${programName}jad>
<filterset begintoken=@ endtoken=@>
<filtersfile file=GENproperties/>
</filterset>
</copy>
</target>