为什么javac任务不会创建类

时间:2010-08-25 09:48:06

标签: java ant

我有一个包含javac任务的ant任务。它报告其中一个类的错误,但构建不会失败,因为它有failonerror =“false”。我想在构建结束时看到类文件,但我没有看到它。谁能告诉我为什么?

使用的属性:

checkout.path=work/workingcopy
classpath.path=work/build/classes
log.file=work/log.txt

Ant代码:

<record name="${log.file}" action="start"/>     
<javac destdir="${classpath.path}" srcdir="${checkout.path}/src"
        debug="true" failonerror="false">
    <classpath>
        <path refid="webinf.lib"/>
        <path refid="tomcat.lib"/>
    </classpath>
</javac>
<record name="${log.file}" action="stop"/>

日志文件:

[javac] Compiling 169 source files to C:\work\build\classes
[javac] C:\work\workingcopy\src\com\mycompany\exception\handlerException\CustomExceptionHandler.java:25: cannot find symbol
[javac] symbol  : class RequestContextImpl
[javac] location: package org.primefaces.context
[javac] import org.primefaces.context.RequestContextImpl;
[javac]                              ^
[javac] C:\work\workingcopy\src\com\mycompany\exception\handlerException\CustomExceptionHandler.java:103: cannot find symbol
[javac] symbol  : class RequestContextImpl
[javac] location: class com.mycompany.exception.handlerException.CustomExceptionHandler
[javac]             new RequestContextImpl(ec);
[javac]                 ^
[javac] Note: Some input files use or override a deprecated API.
[javac] Note: Recompile with -Xlint:deprecation for details.
[javac] Note: Some input files use unchecked or unsafe operations.
[javac] Note: Recompile with -Xlint:unchecked for details.
[javac] 2 errors
[javac] Compile failed; see the compiler error output for details.

3 个答案:

答案 0 :(得分:2)

failonerror选项适用于Ant而不适用于javac。因此,如果failonerror=false,则Ant将继续执行您的任务,即使javac也会返回错误。

来自文档:

failonerror 指示编译错误是否会使构建失败;默认为true。

构建是Ant的构建过程而不是javac的!

答案 1 :(得分:1)

使用 Eclipse Java编译器(EJC)而不是标准的Oracle javac。 ECJ优于javac的一个优点是允许出错,它会尽可能地编译并保留已经生成的类文件。有了javac,它就是一切或全无。

EJC开发用于IDE,用于高度交互式工作,部分编译是必须的,但它也可以用作CLI或Maven插件。 Plexus家伙提供EJC作为一个方便的Maven依赖。

例如在Maven中配置ECJ,部分编译,检查我对这个问题的回答: Maven: partial compilation before code generation

答案 2 :(得分:0)

我遇到了同样的问题。这就是我在网上找到的解决方案

这取决于您实际使用的编译器。如果你正在使用 javac 1.3,这就是Sun的设计理念。 (看到 http://java.sun.com/j2se/1.3/docs/tooldocs/tools-changes.html了解更多信息 信息,特别是第一个子弹的最后一段。) 尝试使用较旧的编译器或使用IBM的jikes编译器。都 javac 1.2.2和jikes 1.13将为编译的类生成输出, 即使文件集中的另一个文件没有。 杰

祝你好运, 迈克尔