javac:无效的目标版本:1.7

10

我使用OS X Mavericks,在升级了JDK之后,无法再通过ant进行编译。

我已经按照通常的方法搜索了一遍,发现大多数答案都指向未设置JAVA_HOME。

帮帮我,stackoverflow,你是我的最后希望!

以下信息可能有用:

$ tail -n1 /etc/profile
export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)

$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home

$ which javac
/usr/bin/javac

$ ls -lah /usr/bin/javac
lrwxr-xr-x  1 root  wheel    75B  8 Jan 11:23 /usr/bin/javac -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javac

$ ls -lah /System/Library/Frameworks/JavaVM.framework/Versions/
total 80
drwxr-xr-x  13 root  wheel   442B 19 Mar 10:10 .
drwxr-xr-x  12 root  wheel   408B 19 Mar 09:59 ..
lrwxr-xr-x   1 root  wheel    10B  8 Jan 11:23 1.4 -> CurrentJDK
lrwxr-xr-x   1 root  wheel    10B  8 Jan 11:23 1.4.2 -> CurrentJDK
lrwxr-xr-x   1 root  wheel    10B  8 Jan 11:23 1.5 -> CurrentJDK
lrwxr-xr-x   1 root  wheel    10B  8 Jan 11:23 1.5.0 -> CurrentJDK
lrwxr-xr-x   1 root  wheel    10B  8 Jan 11:23 1.6 -> CurrentJDK
lrwxr-xr-x   1 root  wheel    10B  8 Jan 11:23 1.6.0 -> CurrentJDK
lrwxr-xr-x   1 root  wheel    10B 19 Mar 10:10 1.7 -> CurrentJDK
lrwxr-xr-x   1 root  wheel    10B 19 Mar 10:10 1.7.0 -> CurrentJDK
drwxr-xr-x   8 root  wheel   272B  8 Jan 11:23 A
lrwxr-xr-x   1 root  wheel     1B  8 Jan 11:23 Current -> A
lrwxr-xr-x   1 root  wheel    58B 19 Mar 10:10 CurrentJDK -> /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents

$ javac -version -source 1.7 -target 1.7 -fork true
javac 1.7.0_51
javac: invalid source release: 1.7
Usage: javac <options> <source files>

我有相同的版本(不同的操作系统),它对我有效...你这里有一个“好棒”的问题。 - fge
3个回答

14
感谢 @david-w 的努力和帮助缩小问题范围。
为了解决问题,我必须
sudo cp $JAVA_HOME/lib/tools.jar /Library/Java/Extensions/

如此提到 这里

愚蠢的操作系统 x


在那个路径下我找不到tools.jar文件。我看到了像deploy.jar、jce.jar、jconsole.jar这样的东西,但没有tools.jar——你有什么想法吗? - Some Guy

2
接受答案中的解决方案对我无效,我收到了以下错误信息:
``` tools.jar: 没有那个文件或目录。 ```
然而,我在这里找到了一个可行的解决方案。简单来说,我安装了Oracle网站上最新版本的jdk,这解决了问题。

1
@KenHampson 是的,这是解决完全相同问题的另一种方法。但这个对我起作用,而被接受的那个没有。我不明白为什么会被踩... - François Romain
@desgnl:我没有给你点踩。我只是通过审核过程添加了一条评论。这里的解决方案对你无效,这表明它可能是一个类似但最终不同的问题。 - khampson
@KenHampson 这提供了另一种解决方案,使它成为一个有效的答案。 - user207421
@EJP:好的,没问题。 - khampson

0

我也在使用来自Oracle的Java 1.7.0_51的OS X Mavericks。没有-fork选项,但其他所有功能似乎都正常工作:

HelloWorld.java

public class HelloWorld
{
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

命令:

$ javac -version -source 1.7 -target 1.7 -fork true *.java
javac 1.7.0_51
javac: invalid flag: -fork
Usage: javac <options> <source files>
use -help for a list of possible options
$ javac -version -source 1.7 -target 1.7 *.java
javac 1.7.0_51
$   # Everything compiled...

你是使用OpenJDK还是官方的Oracle版本?可能OpenJDK还没有识别1.7版本。我知道OpenJDK曾经落后于官方的Oracle版本。
  • 如果你不加上-source-target会发生什么?
  • 如果只有其中一个呢?它是否可以在1.6而不是1.7下工作?

当我尝试1.8时,你得到的错误消息与我得到的相同。你是从命令行、Eclipse还是Ant编译的?

最后一个可能性:点号.不是句号:

$ javac -version -source 1․7 -target 1.7 *.java
javac: invalid source release: 1․7
Usage: javac <options> <source files>
use -help for a list of possible options

那不是句号。它是一个“小圆点”e2:80:a4,而不是“句号”2e
0000000    j   a   v   a   c       -   v   e   r   s   i   o   n       -
           6a  61  76  61  63  20  2d  76  65  72  73  69  6f  6e  20  2d
0000020    s   o   u   r   c   e       1   ․  **  **   7       -   t   a
           73  6f  75  72  63  65  20  31  e2  80  a4  37  20  2d  74  61
0000040    r   g   e   t       1   .   7       *   .   j   a   v   a  \n
           72  67  65  74  20  31  2e  37  20  2a  2e  6a  61  76  61  0a
0000060

嗨,David W(有趣的是我的名字也是这个)回答你的问题,官方Oracle,使用Ant,没有目标可用。尝试编译Hello World让我对问题有了一些了解,但是"$ javac -version *.java \ javac 1.7.0_51 HelloWorld.java:1: cannot access java.lang.Object \ bad class file: /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/rt.jar(java/lang/Object.class) \ class file has wrong version 51.0, should be 49.0:"。 - davedave
通过 "sudo cp $JAVA_HOME/lib/tools.jar /Library/Java/Extensions/" 解决 - 8小时后我会回答问题并正式感谢您。 - davedave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接