簡體   English   中英

Eclipse中JRE系統庫的概念

[英]concept of JRE system library in eclipse

我已經使用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->安裝詳細信息->配置)

請參考以下片段,

即使我使用1.8,最低版本要求是1.6 在此輸入圖像描述

在將配置設置為比要構建的版本更舊的JRE時,無法避免使用錯誤的API。

手冊

注意:僅設置目標選項不能保證您的代碼實際在具有指定版本的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進行構建和開發。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM