java

位置:IT落伍者 >> java >> 浏览文章

在Eclipse中使用Ant来自动编译J2me程序


发布日期:2024年08月11日
 
在Eclipse中使用Ant来自动编译J2me程序

今天是比较郁闷的一天一不小心把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>

上一篇:java唯一的字符串生成器

下一篇:spring用annotation-autowire配置