日食中JRE系统库的概念

时间:2016-02-18 09:37:41

标签: java eclipse maven

我多年来一直在使用eclipse,但这种情况从未发生过。我在我的系统上安装了JDK7,并将其用作工作空间JRE。但是,当我在maven项目中包含以下定义时,库部分将java库显示为[JavaSE 1.6],如下图所示。

enter image description here

<build>
     <plugins>
        <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
                <configuration>
                   <source>1.6</source>
                   <target>1.6</target>
                </configuration>
        </plugin>
    </plugins>
</build>

我理解源和目标配置的概念。但是,我只是不了解JDK7库作为JRE6的方式(或者是吗?)。谁能解释一下?

我正在使用Eclipse Mars和JDK 1.7作为工作台JRE

2 个答案:

答案 0 :(得分:0)

这是项目运行所需的java的最低配置版本(帮助 - &gt;关于Eclipse - &gt;安装详细信息 - &gt;配置)

参考下面的剪辑,

即使我使用1.8,最小版本reqd为1.6 enter image description here

答案 1 :(得分:0)

在将配置设置为较旧的JRE而不是用于构建的JRE时,无法防止使用错误的API。

来自manual

  

注意:仅仅设置目标选项并不能保证您的代码实际上在具有指定版本的JRE上运行。缺陷是无意中使用的API,这些API仅存在于以后的JRE中,这会使您的代码在运行时因链接错误而失败。要避免此问题,您可以配置编译器的引导类路径以匹配目标JRE,或使用Animal Sniffer Maven插件验证您的代码是否使用了非预期的API。

但要回答你的问题:

  

但是,我只是不了解JDK7库作为JRE6的方式。谁能解释一下?

它没有,至少不是真的。例如,如果您已经(仅)安装了JRE 8,但是您的项目设置为JRE 7,则可以编写此行代码而不会出现编译错误,因为它是合法的JRE 7 Java,只需使用添加的方法(join) JRE 8的运行时间。

String join = String.join("", "a", "b");

当您使用JRE 7运行它时,您将在运行时获得此信息:

Exception in thread "main" java.lang.NoSuchMethodError: java.lang.String.join(Ljava/lang/CharSequence;[Ljava/lang/CharSequence;)Ljava/lang/String;
  at snippet.Snippet.main(Snippet.java:5)

因此,如果您确实希望确保合规性,请在系统上安装正确的JRE进行构建和开发。