小编典典

Java编译错误:Mac

java

我在Mavericks上运行Eclipse并安装了1.7 JDK时遇到编译问题:

类文件的版本错误为51.0,应为49.0

因此,由于这看起来像javac版本控制问题,因此我删除了所有Java版本。安装了1.7_51,安装了Apple提供的1.6版本,以便运行Eclipse,更改了符号链接,因此默认值为1.7。与以前相同的问题,同一项目无法编译,尽管其他项目可以编译,

下一步,将问题分解为裸露的骨骼,即从等式中删除蚂蚁等-
所使用的Test.java文件没有方法,只有System.out.println()作为主要方法。cd到包含源文件的目录,并运行编译器以指定javac的完整路径,并检查是否未设置JAVA_HOME:

$ /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/bin/javac
Test.java -verbose -extdirs。-endorseddirs。-cp。-bootclasspath
/库/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/rt.jar
-version

输出:

javac 1.7.0_51

[解析启动的Test.java]

[解析完成67ms]

[源文件的搜索路径:[。]]

[类文件的搜索路径:[/ Library / Java / JavaVirtualMachines / jdk1.7.0_51.jdk /
Contents / Home / jre / lib / rt.jar ,.]]

[加载/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/rt.jar(java/lang/Object.class)]

Test.java:11:无法访问java.lang.Object错误的类文件:/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/rt.jar(java/lang/Object.class

类文件的版本错误为51.0,应为49.0

请删除或确保它出现在类路径的正确子目录中。公开课测试{^

[总336ms] 1个错误

笨拙的。

有任何想法吗 ?

在相关说明中,我似乎无法使javac接受高于1.5 / 5的-target选项:

$ /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/bin/javac
Test.java -verbose -extdirs。-endorseddirs。-cp。-bootclasspath
/库/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/rt.jar
-version -target 1.7

结果是:

javac 1.7.0_51

javac:无效的目标版本:1.7


阅读 213

收藏
2020-11-01

共1个答案

小编典典

经过大量讨论后发布的讨论补丁-所有这些补丁都没有成功-我求助于使用dtrace来查看运行命令时javac正在访问哪些文件。

在终端中(您需要安装XCode)

sudo dtrace -s /dev/stdin

syscall::open*:entry

{

   printf("%s %s", execname, copyinstr(arg0));

}

<Ctrl-D>

在我发现埋在javac的文件访问活动中的另一个终端实例中运行命令行- 考虑到命令行选项,这相当广泛,给人的印象是您限制它在哪里寻找文件 -我发现

打开:进入javac /Users/me/Library/Java/Extensions/tools.jar

我不知道我有一个本地扩展文件夹.....

删除它的内容可以解决此问题。

因此,这是由旧罐子引起的版本不匹配(正如其他瓶子所发现的),在我的情况下,问题是找到它们

2020-11-01