所以我正在尝试编写一个试图编译另一个Java项目的Java程序,并使用编译器中出现的任何潜在错误(在本例中为Javac),程序将尝试修复损坏的代码。这是我正在尝试做的极其简化的视图,但我真正的问题是我找不到任何可能来自Javac的具体错误列表。我不想把它变成一场巨大的语言大战,但C#(当然)有一个我正在寻找的确切例子
http://msdn.microsoft.com/en-us/library/ms228296%28v=vs.80%29.aspx
我已经找到了http://mindprod.com/jgloss/compileerrormessages.html,但正如本网站其他地方所述,此列表包含来自Jikes和其他编译器的错误。
如果有人有任何信息,我当然会感激。
编辑: 如果有人想知道这件事,我最终会打开位于jdk(version_here)/ lib中的tools.jar文件。如果你想真正阅读这些消息,你可以从那里去sun / tools / javac / javac.properties。您需要提取此文件夹/文件。希望这隐藏在文档的某处,因为我讨厌解决方案成为本手册。谢谢所有发布答案的人,我会仔细研究一切,以便更好地解决这个问题。
答案 0 :(得分:1)
嗯,我认为你不会发现任何明确的事情。但是编译器消息可能是国际化的,在这种情况下它们必须被翻译,这意味着通常应该只有少数文件包含所有错误消息。
所以我认为this应该是有用的。看起来你应该仔细看看javac源代码中的 compiler.properties 文件 - 显然并不完美但是我觉得你不会有更好的东西。
至少这应该可以让你得到他们抛出的每一个错误,然后你可以谷歌或者更好地通过源搜索,找到实际抛出它的位置,找出确切的原因。
PS:该文件是jdk7源代码的一部分,所以这里有一个小例子 - 完整的文件是~1.5kloc
# 0: symbol, 1: string, 2: string
compiler.err.cant.inherit.diff.arg=\
{0} cannot be inherited with different arguments: <{1}> and <{2}>
compiler.err.catch.without.try=\
''catch'' without ''try''
# 0: symbol kind, 1: symbol
compiler.err.clash.with.pkg.of.same.name=\
{0} {1} clashes with package of same name
答案 1 :(得分:0)
Eclipse JDT compiler类似于你要做的事情。