[英]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
在將配置設置為比要構建的版本更舊的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.