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

时间:2013-07-05 15:09:30

标签: java ant output javac

通过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启动目标

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

5 个答案:

答案 0 :(得分: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"不是您正在寻找的属性。

  

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

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

答案 1 :(得分: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"/>

答案 2 :(得分:0)

您应该添加属性debug

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

答案 3 :(得分:0)

使用此

<javac srcdir="src" destdir="build/classes" debug="true">
            <classpath>
                <path refid="classpath"/>
            </classpath>
</javac>

答案 4 :(得分:0)

我收到相同的错误消息,没有进一步的信息。问题最终导致我的.jar文件之一被破坏了。替换.jar文件解决了这个问题。