3

我正在尝试在 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 也不起作用。目标 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

4 回答 4

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
  • 环境变量 CLASSPATH 的值#echo $JAVA_HOME
  • 更新替代方案#update-alternatives --config javac
  • 更新替代方案#galternatives
  • Netbeans 使用的 JDK 使用netbeans_jdkhome=开关设置在 /usr/local/netbeans-7.3/etc/netbeans.conf 中。请注意,此开关会覆盖 update-alternatives
于 2013-04-19T20:03:51.020 回答
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”。

于 2013-03-13T05:21:08.733 回答
0

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

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

谁能想到 1.7 编译器不会构建 1.7 代码?

于 2013-03-15T06:40:51.840 回答
0

诊断:

您可以通过运行“mvn --version”查看 Maven 使用的 java 版本

Debian的解决方案:

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

# update-alternatives --set javac /usr/lib/jvm/java-7-openjdk-amd64/bin/javac
于 2014-05-28T22:10:41.453 回答