javac:无效的目标版本:1.7

时间:2014-03-19 00:13:29

标签: java ant compilation osx-mavericks javac

使用OS X Mavericks,升级JDK后,我再也无法用ant编译。

我已经完成了通常的谷歌搜索,绝大多数答案都指向JAVA_HOME未被设置。

帮我堆栈溢出,你是我唯一的希望!

可能有用的信息

$ 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>

3 个答案:

答案 0 :(得分:14)

感谢@ david-w努力并帮助缩小问题范围。

要解决,我必须

sudo cp $JAVA_HOME/lib/tools.jar /Library/Java/Extensions/

如上所述here

愚蠢的os x

答案 1 :(得分:2)

接受的答案中的解决方案对我不起作用;我收到了错误:

  

tools.jar:没有这样的文件或目录。

但是,我找到了一个有效的解决方案here。简而言之,我安装了the latest version of the jdk from Oracle website,这解决了这个问题。

答案 2 :(得分: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