我對Java的運行6.一些大的項目,但我打算開始建立他們在Java中8,因爲大量的編譯工具已經從Java 6以後再編譯JDK安全嗎?
搬走它是安全的,我簡單地使用Java編譯它們8,然後將它們部署在運行Java 8的Web容器中?如果不是,有什麼考慮?它們沒有適當的自動化測試套件。
我對Java的運行6.一些大的項目,但我打算開始建立他們在Java中8,因爲大量的編譯工具已經從Java 6以後再編譯JDK安全嗎?
搬走它是安全的,我簡單地使用Java編譯它們8,然後將它們部署在運行Java 8的Web容器中?如果不是,有什麼考慮?它們沒有適當的自動化測試套件。
的問題可以涉及:
有這些平臺行爲的方面是故意未指定的,底層實現可能會在平臺版本中發生變化。 web容器的
所以是的,這可能是從Java 6到Java 8的通道可能會打破你的代碼。
但是,如果代碼編譯它是相當肯定的代碼的行爲是相同的,因爲一般(但不是總是)復古兼容性被授予。您可以確定只在Java 6和Java 8版本上運行一組完整的單元測試。
這裏的java 6和java 7之間不兼容的一些示例:
JDK-6527962:退休非標準包的com.sun.image.codec.jpeg。如果你的代碼使用這個包,它不會在java上編譯8
JDK-6563734:Path2D.Float和Path2D。雙人應該有最後的getPathIterator方法如果你的代碼ovewrite方法聲明爲final的代碼不會編譯傳遞到Java 8
您是否確實已經在Java 8中刪除了方法的示例,據我所知,Java 9中可能會首先刪除不推薦使用的方法,但iirc從未在早期版本中發生過(除非公開API的東西) –
@MarkRotteveel如果一個方法被刪除了,但是肯定有一些方法會改變簽名拋出異常或者將它們改爲final,這樣它們的擴展會導致不可編譯的代碼 –
在我的經驗中,沒有發生(或者至少是:I無法回想起它的任何例子),Java通常在保持向後兼容性方面非常嚴格。過去有些問題伴隨着行爲的變化,或者濫用「錯誤」的人們,後來修復了他們的軟件。 –
它通常應該是,因爲大多數功能都是向後兼容的。但是,沒有保證。請遵循正確的流程,並在開始生產之前進行測試。
對於Web容器,使用jdk,版本也會發生變化。這可能會導致一些問題,具體取決於軟件供應商以及您在容器中使用的所有服務(JNDI,連接池等)。我曾經在將應用程序遷移到更高版本的JDK時遇到問題。我們還升級了Websphere。我們使用的是JSF,而更高版本的WAS包含JSF jar包,這與我們的應用程序jar有衝突。
您的應用可能會使用很多可能會受到影響的第三方庫。再次,大多數情況下你應該沒問題,但可能會有小問題。不知道你的應用程序,我只能建議遷移和測試來確認。
這是很難說,不知道代碼庫。你爲什麼不在開發環境中嘗試一下,看看會發生什麼?不幸的是,你沒有自動化測試,所以你必須退回到手動測試。 – Stefan
這意味着代碼有可能會中斷嗎?我注意到Oracle在http://www.oracle.com/technetwork/java/javase/8-compatibility-guide-2156366.html#A999198上提供了一些兼容性問題。我想是的,它可能會中斷。 – sancho21