2016-03-09 266 views
0

我知道類似的問題已經得到解答,但是我有一個具體的問題,如果有人能夠拋出一些光芒,那麼這將是一件好事。 我正嘗試將幾個應用程序(使用Swing的桌面應用程序)遷移到Java版本8.目前用於編譯以及運行的版本是6.Java版本升級到8

有大量的第三方API(其中不再受支持)使用這兩個應用程序使用JDK 5編譯。

我打算使用JDK 8編譯應用程序,但爲了避免任何更復雜(和返工)想保留第三方API,因爲它是(在版本5上編譯),即使我的確有API的完整源代碼。

您認爲這是一個好主意,我需要注意哪些問題。

編輯:

精確我qustion在這裏 - 考慮到了Java 5和Java 8之間的通行的行爲和源incompatiblities,是否有可能和實際上可能是一個API與版本的5部作品與JRE 8完美的罰款編譯,但我試着用JDK 8重新編譯它,它會失敗並出現編譯錯誤?

在此先感謝

+1

我以爲你說過你有一個>>具體的<<問題......嘆氣。 –

+0

我確實有一個具體的問題。問題是,如果我只保留我的第三方API(在第5版上編譯)並在JRE8中運行它,以便使用Java 8重新編譯它們,那麼在時間/工作方面是否有優勢 - 我是否期望運行陷入困境。我確實有API的源代碼,但不知道代碼,這意味着任何源代碼修改都會帶來風險。 – Abby

+0

這是一個非特定的問題。 –

回答

1

通常舊代碼在新的JVM上運行沒有問題。

只有極少數例外需要考慮。 它們在java 8 compatibility guide中列出。

每個不兼容性都與一個數字一起列出。

如在類Collection一例removeAll具有不同的行爲,如果你在Java 8傳遞空參數:

RFE 7131459

區域:核心利布斯/ java.util.Collections中內容提要以前的 版本中,Collection.removeAll(Collection)和 的某些實現如果 集合本身爲空,retainAll(Collection)將默默忽略空參數。從此版本開始,如果作爲參數 提供null,則集合將始終引發NullPointerException。

不相容性質的行爲

如果你的代碼,擁有一套完整的單元測試,你可以使用Java 8的JRE運行和檢查,他們沒有失敗。如果單元測試的覆蓋率已經完成,那麼您確信升級到java 8將不會有問題。

+0

我聽起來很愚蠢,但這是否意味着我可以使用JDK 8編譯我的應用程序,但保留其他依賴項(第三方API)使用5編譯,並且它通常應用於JRE 8? – Abby

+0

是的,你可以。通常它會發生在較老的庫中 –

+0

你認爲用JDK 8重新編譯較舊的庫是一個更好的主意嗎? (我擁有所有這些庫的源代碼) – Abby