我有一个包含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.
答案 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将为编译的类生成输出, 即使文件集中的另一个文件没有。 杰
祝你好运, 迈克尔