zoukankan      html  css  js  c++  java
  • Ant是个好东西[转]

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

    开发者在线 Builder.com.cn 更新时间:2007-09-23作者:中国IT实验室 来源:中国IT实验室

    本文关键词: Ant 编程 Java


      今天是比较郁闷的一天,一不小心把eclipse的一个j2me项目中的verified/classes目录中的东东删除了。之后才发现eclipse是如何惩罚我的:它再也不会在这个目录中生成class了,呵呵,罢工了我的工。
      
      为什么eclipse不是想netbeans那样用ant来编译、运行j2me项目那??好在本人目前正在研究ant,呵呵,小试牛刀地用了2小时做了个比较完善的ant脚本可以来弥补一下eclipse对我心情的打击了。
      
      下面我把这个脚本和源程序(含demo)贡献出来,大家一起研究探讨。
      
      完成以下功能:
      1.建立基本目录框架
      2.编译src目录中的源文件
      3.调用preverify.exe对类文件进行验证
      4.将类文件生成jar包
      5.调用proguard类对jar包进行混淆,并解压缩
      6.将经过混淆、解压缩后的类、资源文件生成jar包,复制src目录中的jad文件,完成程序部署
      7.调用emulator运行程序
      
      用法:
      只需要修改一下CONF.properties文件中的属性:
      1.midp.lib.dir-WTK的lib目录路径(位于CONF.properties文件中)
      2.midp.lib.path-根据需要扩展使用的jar(位于CONF.properties文件中)
      3.programName-生成jar/jad文件的名字
      在本脚本中可修改的地方:
      preverify.exe和emulator.exe的具体参数可以根据需要修改。
      
      注意:
      1.src目录中需要有MANIFEST.MF和$.jar文件,这些将用在生成jar和部署程序时.
      2.res目录中放置使用的png图片文件.
      
      附加类库:
      混淆器类Proguard-位于lib中。
      
      文件说明:
      CONF.properties:配置属性文件
      GEN.properties:生成MANIFEST.MF和$.jad文件的替换属性文件
      JAD.tmp:生成jad文件用到的替换模板文件
      MANIFEST.tmp:生成MANIFEST.MF文件用到的替换模板文件
      
      <?xml version="1.0" encoding="GBK"?>
      <project name="automake" default="end" basedir=".">
      <property file="CONF.properties"/>
      <property name="src.dir" value="$src"/>
      <property name="res.dir" value="$res"/>
      <property name="build.dir" value="$build"/>
      <property name="deploy.dir" value="$deploy"/>
      <property name="package.dir" value="$package"/>
      <property name="package.extract.dir" value="$extract"/>
      <property name="preverified.dir" value="$preverified"/>
      <property name="preverified.noObfusedClass.dir" value="$noObfusedclasses"/>
      <property name="preverified.obfusedClass.dir" value="$obfusedclasses"/>
      <property name="preverify.bin" value="$binpreverify.exe"/>
      <property name="emulator.bin" value="$binemulator.exe"/>
      <property name="proguard.lib.dir" value="$lib"/>
      <property name="jad.file" value="$.jad"/>
      <target name="init" description="初始化环境">
      <echo message="初始化目录"/>
      <delete dir="$"/>
      <delete dir="$"/>
      <delete dir="$"/>
      <delete dir="$"/>
      <mkdir dir="$"/>
      <mkdir dir="$"/>
      <mkdir dir="$"/>
      <mkdir dir="$"/>
      <mkdir dir="$"/>
      <mkdir dir="$"/>
      <mkdir dir="$"/>
      </target>
      <target name="complie" depends="init" description="编译">
      <echo message="编译程序"/>
      <javac srcdir="$" destdir="$">
      <bootclasspath path="$"/>
      <classpath>
      <fileset dir="$" includes="*.jar"/>
      </classpath>
      </javac>
      </target>
      <target name="verifyForNoObfuscate" description="验证j2me的class,将验证后的class输出到$">
      <echo message="验证生成的class,将验证后的class输出到$"/>
      <exec executable="$" searchpath="false">
      <arg line="-classpath $"/>
      <arg line="-d $"/>
      <arg line="$"/>
      </exec>
      </target>
      <target name="genManifest" description="根据模板属性文件的值生成Manifest文件">
      <echo message="根据模板属性文件的值生成Manifest文件"/>
      <!--
      使用$替换掉属性文件GEN.properties中的@PROGRAMNAME@
      -->
      <replace file="GEN.properties"
      token="@PROGRAMNAME@"
      value="$"
      />
      <!--
      使用GEN.properties文件中的属性值替换掉模板文件MANIFEST.tmp中的对应属性值,
      将替换后的数据复制到$MANIFEST.MF
      -->
      <copy file="MANIFEST.tmp"
      tofile="$MANIFEST.MF">
      <filterset begintoken="@" endtoken="@">
      <filtersfile file="GEN.properties"/>
      </filterset>
      </copy>
      </target>
      <target name="package" description="将class打包,输出到$">
      <echo message="将class打包,输出到$"/>
      <jar basedir="$"
      jarfile="$$-noObfused.jar"
      manifest="$MANIFEST.MF"   >
      <fileset dir="$" includes="**/*.png"/>
      </jar>
      </target>
      <target name="obfuscate" description="对打包后的jar文件进行混淆,然后解压缩至$">   <echo message="对打包后的jar文件进行混淆,然后解压缩至$"/>
      <java fork="true" classname="proguard.ProGuard">
      <classpath path="$proguard.jar"/>
      <arg line="-libraryjars $"/>
      <arg line="-injar $$-noObfused.jar"/>
      <arg line="-outjar $$-obfused.jar"/>
      <!--保留MIDlet的类声明不被混淆-->
      <arg line="-keep 'public class * extends javax.microedition.midlet.MIDlet'"/>
      <!--打印被保留的类名-->
      <arg line="-printseeds"/>
      </java>
      <unjar src="$$-obfused.jar"
      dest="$"   />
      </target>
      <target name="verifyForObfuscate" description="验证被混淆的class,输出到$">
      <echo message="验证被混淆的class,输出到$"/>   <exec executable="$" searchpath="false">
      <arg line="-classpath $"/>
      <arg line="-d $"/>
      <arg line="$"/>
      </exec>
      <copy todir="$">
      <fileset dir="$" includes="**/*.png"/>
      </copy>
      </target>
      <target name="deploy" description="将经过验证的混淆后的class打包,部署在delpoy目录">
      <echo message="将经过验证的混淆后的class打包,部署在$目录"/>
      <jar basedir="$"
      jarfile="$$.jar"
      manifest="$MANIFEST.MF"
      >
      <fileset dir="$" includes="**/*.class;*.png"/>
      </jar>
      </target>
      <target name="genJad" description="在$目录生成JAD文件">
      <echo message="在$目录生成JAD文件"/>
      <length file="$$.jar" property="jarsize"/>
      <echo message="获得jar文件长度:$"/>
      <replace file="GEN.properties"
      token="@JARSIZE@"
      value="$"
      />
      <replace file="GEN.properties"
      token="@PROGRAMNAME@"
      value="$"
      />
      <copy file="JAD.tmp" tofile="$$.jad">
      <filterset begintoken="@" endtoken="@">
      <filtersfile file="GEN.properties"/>
      </filterset>
      </copy>
      </target>
  • 相关阅读:
    javascript进阶一
    javascript基础
    前端开发工程师——网易云课堂
    win10,软件, 发布者不受信任怎么办
    oracle10g如何配置客户端
    ASPxGridView中DetailRow的使用
    vb中&和+的区别
    nvl
    substr
    ORA-01791: 不是 SELECTed 表达式
  • 原文地址:https://www.cnblogs.com/huqingyu/p/1227706.html
Copyright © 2011-2022 走看看