2011-08-21 54 views
6

使用javac(或ant任务)时,错误消息不包括整个文件路径,它只包含文件名。例如,javac错误消息不显示整个文件路径

$ javac src/path/to/Filename.java 
Filename.java:1: package foo.bar does not exist 
import foo.bar.Baz; 
      ^

我想是,

$ javac src/path/to/Filename.java 
src/path/to/Filename.java:1: package foo.bar does not exist 
import foo.bar.Baz; 
      ^

我的问题是,如果它没有考虑到整个文件路径,而不仅仅是文件名VIM的quickfix不起作用。只有文件名,运行后会打开一个新的空文件:make。

我使用:

  • Debian的喘息
  • 的OpenJDK-6-jdk的v6b23〜pre7-1
  • 的javac v1.6.0_23
+0

我发现如果使用gcj或eclipse内建编译器,将打印完整路径。但是ant还会打印出JAVA_HOME找不到的错误。我不知道如何解决这个问题。 –

+0

我99%确定这是一个Ubuntu bug。我只是将我的笔记本电脑从FreeBSD转移到了Ubuntu 11.10。我也可以在FreeBSD服务器上看到javac错误的整个路径。仍在寻找解决方案... – sarumont

回答

1

我不认为有是一个简单的方法来做到这一点。

不过,我相信有一个复杂的方法。它基本上涉及编写您自己的编译器运行器,该编译器运行器利用JDK安装的能力在正在运行的程序中加载和运行Java编译器。你需要实现很多东西,但关键是诊断处理器,它以你需要格式化编译器错误信息的方式进行格式化。

下面是一些相关链接:

  • Package javax.tools - 提供了接口,可以从程序中调用,例如工具,编译器。
  • JavaCompiler - 编译器实现的接口
  • FileObject - 编译器用来表示源文件的接口;例如在诊断。请注意0​​方法!