【问题标题】:Javac for dynamic compilation is not working用于动态编译的 Javac 不起作用
【发布时间】:2016-03-24 11:37:59
【问题描述】:

我正在尝试编译一个 HelloWorld 类作为测试,它显示一个我不知道如何解决的错误。似乎与不兼容的版本有关,但是当我执行java -versionjavac -version 时都显示1.8.0_73。

这是我要编译的内容:

String arquivo2 = "/C:/classes/HelloWorld.java";
PrintWriter saida = new PrintWriter(new FileWriter("logCompilacao.txt"));
int resultadoCompilacao = com.sun.tools.javac.Main.compile(new String[]{arquivo2},saida);

但这是输出:

/C:/classes/HelloWorld.java:2: cannot access java.lang.Object
bad class file: C:\Program Files\Java\jre1.8.0_73\lib\rt.jar(java/lang/Object.class)
class file has wrong version 52.0, should be 49.0
Please remove or make sure it appears in the correct subdirectory of the classpath.
public class HelloWorld {
       ^
1 error

“类文件的版本错误 52.0,应该是 49.0”。有人知道如何解决这个问题吗?我尝试了很多,但我没有找到如何解决它。

【问题讨论】:

  • 您确定您正在运行正确的javajavac 程序吗?其中一个可能有两个不同的版本。
  • 看起来你的 java & javac 版本不匹配,
  • @MarounMaroun 是的,我确信我正在运行正确的 java。关于 javac,我添加了一个在另一个站点下载的外部 jar,因为没有这个“javac.jar”,我的代码将无法导入一些库,如 com.sun.tools.javac.Main。如果是这个问题,我不知道如何解决。

标签: java compilation javac


【解决方案1】:

为了能够运行 java 编译器,您从另一端添加了一些外部。

这不是一个好方法。很可能,您只安装了一个 JRE(运行时环境)。

相反,您应该下载安装 JDK(开发工具包)。后者自带javac;您可以放心,它的“javac”和“java”二进制文件可以很好地协同工作。

所以:确保您从正确的环境开始;不是你用这里或那里的东西拼凑起来的东西。

【讨论】:

  • 但这就是问题所在。 JDK 已安装,就像我说的那样是最新版本:1.8.0_73。 JRE 和 JDK 都已安装。但是没有这个外部jar,程序就无法运行
【解决方案2】:

我终于找到了解决方法。似乎默认情况下 eclipse 只导入 jre jar,所以我必须将在我的 jdk 文件夹中找到的文件“tools.jar”添加为外部 jar。 C:\Program Files\Java\jdk1.8.0_73\lib\tools.jar。 之后我可以编译我的类

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多