【问题标题】:concept of JRE system library in eclipseeclipse中JRE系统库的概念
【发布时间】:2016-02-18 09:37:40
【问题描述】:

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

<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 的方式(或者是吗?)。谁能解释一下?

我正在使用带有 JDK 1.7 的 Eclipse Mars 作为工作台 JRE

【问题讨论】:

    标签: java eclipse maven


    【解决方案1】:

    在将您的配置设置为比您用于构建的 JRE 更旧的 JRE 时,无法防止使用错误的 API。

    来自manual

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

    但要回答你的问题:

    但是,我只是不理解 JDK7 库充当 JRE6 的方式。谁能解释一下?

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

    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 进行构建和开发。

    【讨论】:

      【解决方案2】:

      这是你的项目运行所需的java最低配置版本(帮助-->关于Eclipse-->安装细节-->配置)

      参考下面的片段,

      即使我使用的是 1.8,最低版本要求也是 1.6

      【讨论】:

      • 很高兴我了解了这些信息。但是,我的问题不是关于 Eclipse 安装,而是关于项目库......
      猜你喜欢
      • 2012-04-13
      • 2011-10-29
      • 2018-05-06
      • 2013-06-27
      • 1970-01-01
      • 2016-12-14
      • 2011-06-07
      • 2012-03-02
      • 1970-01-01
      相关资源
      最近更新 更多