通过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.
问题是我不知道如何查看编译器错误输出以获取详细信息 ...
可能有用的配置元素很少:
我知道在SO上有一些相关的回答问题,但没有一个真正回答这个简单的问题:
compile
标记的特定库; 答案 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文件解决了这个问题。