Ant编译无响应问题

前些日子因为要搞自动编译需要用到Ant执行相关操作。Ant以前经常用,常常用来编译、打包、部署,以及用它来生成javadoc。可现如今,没想到Ant反倒给我出了一个不大不小的难题——编译失败且无任何提示
有这些个古怪的问题:
先看build.xml

Xml代码
  1. <javac srcdir="${src.dir}"  
  2.        destdir="${classes.dir}"  
  3.        encoding="UTF-8"  
  4.        source="1.6"  
  5.        target="1.6"  
  6.        debug="true"  
  7. >  
  8.     <classpath refid="build.classpath" />  
  9. </javac>  

这里没有列出详细的build.xml,仅分析上述代码,只要路径正确,依赖包存在,编译应当正常通过。倘若路径、依赖包出现问题,至少能在控制台中获得相应提示。但是,问题还是出现了,执行上述任务,在控制台得不到任何提示,无法确认编译是否成功!
控制台输出结果:
引用

Buildfile: D:\work\workspace\xyz\build\build.xml
clean:
     [echo] Clean
   [delete] Deleting directory D:\work\workspace\xyz\build\classes
init:
     [echo] Init
    [mkdir] Created dir: D:\work\workspace\xyz\build\classes
compile:
     [echo] Compile
    [javac] Compiling 120 source files to D:\work\workspace\xyz\build\classes


控制台输出到此,什么提示也没有了,很诡异!
同样的build.xml在别的项目中就没有任何问题。
仔细检查classes目录,文件正常编译。
经过代码检查,发现非规范代码应用,如:
Java代码
  1. Date d = new Date("2009-01-01");  

在JDK 1.1中,该构造函数被废弃,即加入了“@Deprecated”标识。
同理,代码中调用了废弃的方法,或某个类加上了废弃“@Deprecated”标识,都会有这个问题。不曾想到Ant居然对这些废弃标识有如此要求!
设想加入“-Xlint:unchecked -Xlint:deprecation”编译参数。
Xml代码
  1. <javac srcdir="${src.dir}"  
  2.        destdir="${classes.dir}"  
  3.        encoding="UTF-8"  
  4.        source="1.6"  
  5.        target="1.6"  
  6.        debug="true"  
  7.        deprecation="false"  
  8.        optimize="false"  
  9.        failonerror="true"  
  10. >  
  11.     <classpath refid="build.classpath" />  
  12.     <compilerarg value="-Xlint:unchecked -Xlint:deprecation" />  
  13. </javac>  

未果!看来只能对现有代码一一清理了!
去除所有非规范依赖应用,将废弃类代码清理,继续编译,未果!
发现代码中部分有非规范泛型应用,如下所示:
Java代码
  1. Enumeration headerNames = request.getHeaderNames();  

这里没有强制使用泛型转换,导致编译失败,可加入“@SuppressWarnings("unchecked")”标识。
对代码一一排查,针对所有“黄标签”代码进行修正。
重新编译,通过!
引用

Buildfile: D:\work\workspace\xyz\build\build.xml
clean:
     [echo] Clean
   [delete] Deleting directory D:\work\workspace\xyz\build\classes
init:
     [echo] Init
    [mkdir] Created dir: D:\work\workspace\xyz\build\classes
compile:
     [echo] Compile
    [javac] Compiling 120 source files to D:\work\workspace\xyz\build\classes
BUILD SUCCESSFUL
Total time: 7 seconds



以前使用Ant都是针对新系统,代码要求极为严格,尤其是对于“黄标签类”有着很严格的要求,在提交代码时就有可能被清理掉。但此次主要是对遗留系统做相关调整,难免遇到这些奇怪的问题。
这也告诫大家,在书写代码时尽量按照相关规范书写:避免使用废弃的方法、类,避免声明无用变量。在使用聚合类时,注意使用泛型。如果泛型不明确,可强制使用“@SuppressWarnings("unchecked")”标识。

如果大家遇到此类问题可以参考上述方法对症下药,最关键之处还是在于代码的规范编写!

你可能感兴趣的:(ant编译)