`

Ant编译无响应问题

阅读更多
前些日子因为要搞自动编译需要用到Ant执行相关操作。Ant以前经常用,常常用来编译、打包、部署,以及用它来生成javadoc。可现如今,没想到Ant反倒给我出了一个不大不小的难题——编译失败且无任何提示!
大概4年以前,当时Eclipse还没有现在这么强大,对于打jar、war还不方便,我们经常使用Ant辅助Eclipse来完成这些操作,不曾记得有这些个古怪的问题。
先看build.xml
<javac srcdir="${src.dir}"
       destdir="${classes.dir}"
       encoding="UTF-8"
       source="1.6"
       target="1.6"
       debug="true"
>
	<classpath refid="build.classpath" />
</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目录,文件正常编译。
经过代码检查,发现非规范代码应用,如:
Date d = new Date("2009-01-01");

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

未果!看来只能对现有代码一一清理了!
去除所有非规范依赖应用,将废弃类代码清理,继续编译,未果!
发现代码中部分有非规范泛型应用,如下所示:
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")”标识。

如果大家遇到此类问题可以参考上述方法对症下药,最关键之处还是在于代码的规范编写!
5
2
分享到:
评论
3 楼 louis0911 2012-03-22  
我也是这个问题,找了半天,试试您的方法,不过代码量很多的情况一下一个个的改是不是太麻烦了,    
2 楼 snowolf 2010-01-18  
http://grandboy.iteye.com/admin/blogs/235606
grandboy 写道
既然是正常运行的系统,代码不改应该也能正确编译。 请参考:
http://grandboy.iteye.com/admin/blogs/235606

诡异的问题就是同样的build.xml在不同的项目有着不同的结果,就算是都有“黄标签代码”一个无响应,一个给出警告!
1 楼 grandboy 2010-01-18  
既然是正常运行的系统,代码不改应该也能正确编译。 请参考:
http://grandboy.iteye.com/admin/blogs/235606

相关推荐

    关于网络爬虫的小程序 包括ant编译

    这个名为"网络爬虫的小程序 包括ant编译"的项目,显然旨在帮助开发者学习和理解如何构建一个简单的网络爬虫,并结合Java Swing来创建用户界面,同时利用Ant构建工具进行项目的管理和编译。 首先,我们来看看Java在...

    ant-bootstrap.jar.zip

    Bootstrap则是一个流行的前端开发框架,用于创建响应式和移动优先的网页。 描述中提到的"ant, bootstrap, jar.zip包下载, 依赖包"表明这个压缩文件可能包含了一个用于启动Ant的jar文件(ant-bootstrap.jar),可能...

    tomcat6.0源码及编译依赖项(可编译)

    在`tomcatsource`目录中,通常会包含一个名为`build.xml`的Ant构建文件,它定义了编译、测试和打包的步骤。 2. **环境准备**:编译Tomcat 6.0源码前,需要安装Java Development Kit (JDK) 和Apache Ant。确保环境...

    JMETER-3.1+ant

    【描述】"jmeter3.1的包和ant1.9.5的包,自己用的,不晓得解压会不会有问题" 提示我们关注的是这两个软件包的下载、安装以及可能出现的问题。在解压过程中,确保你有一个支持ZIP格式的解压工具,如7-Zip或WinRAR。...

    antsvn更新打包部署提交自动化

    在Ant中,`build-for-server.xml`通常是一个构建脚本,它定义了一系列任务,如编译源代码、创建JAR或WAR文件、复制必要的资源到特定目录,以及执行自动化测试等。这个脚本是XML格式的,遵循Ant的规则,通过指定目标...

    ant1-9-4和tomcat7-0-57包

    Ant可以用来编译源码、打包Web应用(WAR文件),然后使用Ant的deploy任务将WAR文件部署到Tomcat服务器上。这样,整个构建和部署流程可以通过自动化脚本完成,极大地提高了开发效率。 总结来说,Ant和Tomcat是Java ...

    ant_shell自动部署

    - **构建**:使用Ant编译源代码,生成可部署的类文件和资源。 - **打包**:将编译后的结果打包成WAR或JAR文件。 - **上传**:将打包好的文件传输到目标服务器。 - **解压和复制**:在目标服务器上解压并复制到...

    17_ant_完整的用户管理小项目_搭建了spring_mvc的框架

    在这个项目中,Ant被用作自动化构建工具,它可以帮助开发者编译源代码、打包应用、执行测试等。Ant基于XML配置,允许开发者定义任务和目标,使得构建过程可定制且易于维护。以下是关于Ant和Spring MVC框架的一些关键...

    Ant+JMeter后台自动化测试

    它支持各种任务,包括编译Java源代码、运行单元测试、打包应用程序等。在自动化测试场景中,Ant 可以用来管理JMeter测试脚本的执行和结果处理。 #### 三、JMeter概述 Apache JMeter 是一款广泛使用的性能测试工具,...

    性能自动化测试(基于jmeter+jenkins+ant+tomcat)

    在性能测试中,Ant可以用来自动化JMeter脚本的编译、执行和结果分析,简化测试流程。 **Jenkins** 是一个持续集成工具,用于自动化各种任务,包括构建、测试和部署软件。通过配置Jenkins作业,可以定期触发性能测试...

    jmeter+ant自动话及优化报告

    - **构建工具**:Ant使用XML来描述构建过程,包括编译、打包、测试等任务,易于理解和维护。 - **与JMeter的集成**:通过`ant-jmeter`库,Ant可以调用JMeter命令行工具执行测试计划,并收集结果。 3. **json-lib-...

    如何编译运行servlet

    例如,一个简单的Ant构建文件可能包括编译、创建WAR文件等任务。 6. **运行Web应用**: - 如果你有Tomcat、Jetty等Web服务器,你可以将编译后的Web应用部署到其中。将整个项目目录复制到服务器的`webapps`目录下,...

    JSP预编译和打包成jar

    而**build.xml**是Ant的任务脚本,它定义了一系列的构建任务,比如编译源代码、打包JAR、预编译JSP等。 在**build.xml**文件中,开发者可以编写自定义的预编译JSP任务,例如使用`javac`任务来编译预处理的JSP源代码...

    tomcat源码编译

    深入理解并编译Tomcat源码,对于Java开发者来说,不仅能够提升对Web容器工作原理的认识,还能帮助优化性能,解决复杂的技术问题。 首先,我们来了解一下Tomcat源码编译的基础步骤: 1. **获取源码**:Tomcat的源码...

    6.Jmeter+Ant+Jenkins接口自动化测试平台.pdf

    Ant可以自动编译、测试和部署软件,Jenkins可以自动执行Ant构建脚本。 知识点9:平台搭建 平台搭建是指将Jmeter、Ant和Jenkins集成在一起,实现自动化的接口测试平台。平台搭建需要配置Jmeter、Ant和Jenkins的环境...

    前端开源库-ant

    Apache Ant,则是一个Java项目构建系统,它是早期Java开发中的重要工具,用于自动化编译、打包、测试等任务。Ant使用XML来描述构建过程,使得构建脚本易于理解和维护。Ant与Node.js的结合,通过"node-ant"这样的...

    Struts2官方例子1(Ant版的)

    Ant是Apache软件基金会开发的一款Java构建工具,它通过XML配置文件来定义任务,进行项目的编译、打包和部署等自动化工作。在这个例子中,Ant将用于构建和管理Struts2应用的生命周期。 1. **基本环境搭建**:Basic_...

    react-antDesgin-admin.zip

    Ant Design,又称antd,是阿里团队开发的一个流行的React UI组件库,它提供了丰富的界面元素,如按钮、表格、布局、导航等,用于快速构建美观且响应式的Web应用。在本项目中,特别提到了“面包屑”(Breadcrumb),...

    Jmeter+ant实现测试报告build.xml和报告模板jmeter-results-newreport.xsl

    2. **Ant自动化构建**:Apache Ant是一种基于XML的构建工具,常用于Java项目的编译、打包和部署。在接口测试场景中,Ant可以用来自动化执行JMeter测试计划,并生成测试报告。通过在`build.xml`文件中定义目标和任务...

Global site tag (gtag.js) - Google Analytics