熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

在Eclipse中使用Ant來自動編譯J2me程序

2013-11-23 20:13:51  來源: Java開源技術 

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

From:http://tw.wingwit.com/Article/program/Java/ky/201311/28151.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.