(转)ANT与RTS的结合

ANT与RTS结合
 
用用户tn_prodpre登陆10.3.72.157,vi .bash_profile,设置如下环境变量:
ANT_HOME=/home/tn_prodpre/apache-ant-1.6.5
JAVA_HOME=/usr/local/j2sdk1.4.2_09
PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH:$HOME/bin
 
在项目很大的情况下,javac可能报错: java.lang.OutOfMemoryError,需要设置如下行
fork="yes"
executable="/usr/local/j2sdk1.4.2_09/bin/javac"
memoryInitialSize="120m"
memoryMaximumSize="300m"
 
当在一个操作系统,编译另一个操作系统的java时,可能会有character问题,设置操作系统:
#export LANG=zh_CN.GB2312
#export LANG=en_US.ISO8859-1
export LANG=en_US
 
关于Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/tools/ant/launch/Launcher的解决:
这是linux系统默认安装了一些ant的lib,修改 /etc/ant.conf中 ANT_HOME=/usr/share/ant 为正确安装ant的地址
 
ant中如何读取操作系统的环境变量?
  <property environment="env"/>
  <property name="RTSNO" value="${env.RTS_NO}"/>
  <echo message="${RTSNO}"/>
RTS_NO是之前在shell中设置的,如此则ant可以和操作系统的环境变量交互。
 
对于自写task,定义时,需要加上classpath属性:
  <target name="RTS">
 <taskdef name="rtstask" classname="RTSTask" classpath="."/>
    <rtstask rtsNo="${RTSNO}"/>
  </target>
 
自写task中改写build.xml中的property值很简单:
getProject().setProperty("cvsFiles", files.toString());
 
全局变量的值无法在多个target间共享:
如果两个target A、B是串行调用(非嵌套调用),则当A修改了一个全局的property值时,这个修改只能在A的区间段生效,到了B则看到的是老的结果。解决方法是在A中调用B。
 
在用javac的task时,发现class基本都不编译,ant会提示:
XXX.java omitted as XXX.class is up to date.
初始时以为是这个class存在于classpath的缘故,因为把它们从classes目录中删除就可以编译。于是费尽心机想把这几个待编译的class从classpath中剔除,用fileset excludes,后来发现:ant它又能怎么处理这种classpath呢?
最终发现,是日期戳的问题。当java源文件比类文件新时,javac会编译该源文件从而得到一个更新的class文件;若class反而比java新,则不会去编译。
其实想想,这可是jdk的基础问题,做了这多年java开发,还没弄清这个道理,汗~
posted @ 2013-04-23 10:16  GreyWolf  阅读(202)  评论(0编辑  收藏  举报