如何通过Ant任务运行javac时查看编译器输出?

23

有没有一种清晰明了且简单的方法,在Ant任务中运行javac时查看编译器输出?

这是我的javac Ant标签:

<javac srcdir="${myproject.src}" destdir="${myproject.class}">
    <!-- ... -->
</javac>

这是我收到的唯一错误信息:
/path/to/build.xml:42: Compile failed; see the compiler error output for details.

问题在于我不知道如何查看编译器的详细错误输出...

以下是几个可能有用的配置元素:

  • Ant 1.6.5
  • Windows 7 x64
  • Java 1.6.0_20 x32
  • 通过Eclipse启动目标

我知道在Stack Overflow上有一些相关的问题,但是没有一个真正回答了这个简单的问题:


在你看到错误信息之前,难道你没有看到[javac] ...吗? - Sotirios Delimanolis
@sp00m,当从命令行运行ant时,您是否看到错误详细信息。我猜问题与eclipse有关而不是ant。 - Jayan
如果你没有看到任何[javac],那可能是java.lang.OutOfMemoryError: Java heap space,在这里查看Stackoverflow - hokr
5个回答

8
我认为你需要使用verbose="true"属性。

请求编译器提供详细输出;默认不提供。

你已经在评论中提到,这并没有打印出错误的原因。我认为你的情况可能还有其他问题。我有一个示例项目,无论如何,我的错误原因都会被打印出来。以下是使用verbose="false"的输出:
[mkdir] Created dir: C:\Projects\MavenSandbox\target\classes
[javac] C:\Projects\MavenSandbox\mavensandbox.xml:284: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
[javac] Compiling 3 source files to C:\Projects\MavenSandbox\target\classes
[javac] C:\Projects\MavenSandbox\src\main\java\com\sandbox\Sandbox.java:8: error: cannot find symbol
[javac]         System.out.prinln("Hello, I\'m the best!");
[javac]                   ^
[javac]   symbol:   method prinln(String)
[javac]   location: variable out of type PrintStream
[javac] 1 error

有些奇怪的问题可能是由于您的代码引起的,能否创建一个可以重现错误的示例项目?


如您所述,debug="true"不是您要找的属性。

指示是否应使用调试信息编译源代码;默认为关闭。如果设置为关闭,则对于支持它的编译器,将在命令行上传递-g:none(对于其他编译器,不会使用命令行参数)。如果设置为true,则debuglevel属性的值确定命令行参数。

您知道当您获得堆栈跟踪并且其中包含行号时的情况吗?这就是debug="true"的作用。如果关闭,您将不会获得行号。


2
你在哪里添加 verbose="true"?我遇到了同样的问题,使用 Eclipse 生成 build.xml 文件,但只显示 somepath/build.xml:34: Compile failed; see the compiler error output for details. 我已将其添加为唯一的 <javac> 标签属性。但仍然无法在任何地方看到编译器错误输出... - Marek Židek

1
问题也会在Java编译器本身无法启动时出现。例如,当定义的堆大小过大时。Intellij的java2任务将显示以下信息:
Using external javac compiler
Compilation arguments:
...
'-J-Xmx1600m'
...
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

而在我的情况下,是在 build.xml 文件中引起的。

<property name="compiler.args" value="-J-Xmx1600m"/>

0

我一直收到同样的错误信息,但没有更多的信息。问题最终是我的一个.jar文件损坏了。替换那个.jar文件解决了问题。


0
使用这个
<javac srcdir="src" destdir="build/classes" debug="true">
            <classpath>
                <path refid="classpath"/>
            </classpath>
</javac>

-1

你应该添加属性 debug

<javac srcdir="${myproject.src}" destdir="${myproject.class}" debug="true>
    <!-- ... -->
</javac>

它不会改变任何东西(我已经有了它)...那么编译器的输出应该在哪里? - sp00m
@SotiriosDelimanolis 使用 verbose 选项后,Ant 的输出会更多,但据我所知,它并不会影响编译器的输出... - sp00m
@SotiriosDelimanolis 我在回复你的评论之前已经尝试过了。 - sp00m
@sp00m 我认为你是在假设。我会尝试找其他的东西。 - Sotirios Delimanolis
1
你应该尝试在 Eclipse 之外执行你的 Ant 脚本,看看是否会得到不同的输出。 - VirtualTroll

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接