Javac 1.7版无法为目标1.7构建

时间:2013-03-13 05:03:21

标签: java version javac target

我试图在Linux Mint系统上使用Sun Java JDK 1.7.0_17编译Java代码,但我遇到了这个问题。

$ javac  -version -target 1.7 
javac 1.7.0_17
javac: invalid target release: 1.7

-target 1.6也不起作用。 Target 1.5有效,但我遇到了版本问题,

$ javac  -version -target 1.5 HelloWorld.java 
javac 1.7.0_17
HelloWorld.java:2: cannot access java.lang.Object
bad class file: /usr/lib/jvm/jdk1.7.0_17/jre/lib/rt.jar(java/lang/Object.class)
class file has wrong version 51.0, should be 49.0
Please remove or make sure it appears in the correct subdirectory of the classpath.
class HelloWorldApp {
^
1 error

是否存在sun java目录之外的可用java目标列表?

我没有指定ClassPath或Javahome,设置它们没有帮助。 jcontrol没有帮助。 我也试过1.7.0_15,结果相似。

4 个答案:

答案 0 :(得分:5)

我追了一个涉及Ubuntu,Netbeans和两个JDK的类似问题:openJDK和oracleJDK。违规(旧的和不相关的)文件最终位于/ usr / java / packages中,并被简单删除。

我收到了:

# javac -version hello.java
javac 1.7.0_21
hello.java:3: cannot access java.lang.Object
bad class file: /usr/lib/jvm/java-7-oracle/jre/lib/rt.jar(java/lang/Object.class)
class file has wrong version 51.0, should be 49.0
Please remove or make sure it appears in the correct subdirectory of the classpath.
public class hello {
       ^
1 error

更重要的是,我找到了有问题的文件:

# javac -verbose -version hello.java

-verbose选项列出了类文件的搜索路径。

我调查期间探讨的其他方面是:

  • 环境变量JAVA_HOME的值#echo $JAVA_HOME
  • 环境变量PATH的值#echo $JAVA_HOME
  • 带有#echo $JAVA_HOME
  • 的环境变量CLASSPATH的值
  • #update-alternatives --config javac
  • 的更新替代方案
  • #galternatives
  • 的更新替代方案
  • Netbeans使用的JDK在/usr/local/netbeans-7.3/etc/netbeans.conf中使用netbeans_jdkhome=开关设置。请注意,此开关会覆盖update-alternatives

答案 1 :(得分:0)

我能够很好地编译文件。我将CD刻入文件目录,然后运行

javac -version -target 1.7 App.java 

(App.java是文件名)。

我能够运行javac -version并且它让我回来了:

javac 1.7.0_17

很清楚它知道我正在使用哪个版本的Java。

如果我按你的方式行事:

javac -version -target 1.7

如果我只运行javac -version,我会收到完全相同的消息:

javac 1.7.0_17

所以似乎运行-version和-target 1.7意味着-target 1.7被忽略。

我确实指定了JAVA_HOME。

为什么还需要指定-target 1.7?如果您使用1.7,那应该是默认值。

在您的第一个源代码帖子中,您的意思是说“javac HelloWorld.java”吗?因为这应该是我认为你想要运行的命令。不是“javac -version -target 1.7”。

答案 2 :(得分:0)

更新:我重新安装了Mint,问题就消失了。 我应该说,这不是我的首选方案。

我还没有比较系统之间的差异。

有人能想到1.7编译器不会构建1.7代码吗?

答案 3 :(得分:0)

诊断:

您可以通过运行“mvn --version”

来查看Maven使用的Java版本

Debian的解决方案:

mvn脚本通过查找javac(which javac)在内部设置JAVA_HOME env变量。因此,如果您同时安装了多个Java版本,例如JDK 6和JDK 7并使用Debian Alternatives系统在它们之间进行选择,即使您将“java”的替代方法更改为JDK 7,mvn仍将使用JDK 6.您还必须更改“javac”的替代方案。 E.g:

# update-alternatives --set javac /usr/lib/jvm/java-7-openjdk-amd64/bin/javac