2016-09-15 53 views
-3

我對Java的運行6.一些大的項目,但我打算開始建立他們在Java中8,因爲大量的編譯工具已經從Java 6以後再編譯JDK安全嗎?

搬走它是安全的,我簡單地使用Java編譯它們8,然後將它們部署在運行Java 8的Web容器中?如果不是,有什麼考慮?它們沒有適當的自動化測試套件。

+2

這是很難說,不知道代碼庫。你爲什麼不在開發環境中嘗試一下,看看會發生什麼?不幸的是,你沒有自動化測試,所以你必須退回到手動測試。 – Stefan

+1

這意味着代碼有可能會中斷嗎?我注意到Oracle在http://www.oracle.com/technetwork/java/javase/8-compatibility-guide-2156366.html#A999198上提供了一些兼容性問題。我想是的,它可能會中斷。 – sancho21

回答

2

的問題可以涉及:

有這些平臺行爲的方面是故意未指定的,底層實現可能會在平臺版本中發生變化。 web容器的

  • 結構,可以是從一個版本支持Java 6和版本支持Java通過時,改變從Java 6的到Java 8除去老方法8個
  • 外部庫不同,讓您代碼不能編譯

所以是的,這可能是從Java 6到Java 8的通道可能會打破你的代碼。

但是,如果代碼編譯它是相當肯定的代碼的行爲是相同的,因爲一般(但不是總是)復古兼容性被授予。您可以確定只在Java 6和Java 8版本上運行一組完整的單元測試。


這裏的java 6和java 7之間不兼容的一些示例:

JDK-6527962退休非標準包的com.sun.image.codec.jpeg。如果你的代碼使用這個包,它不會在java上編譯8

JDK-6563734Path2D.Float和Path2D。雙人應該有最後的getPathIterator方法如果你的代碼ovewrite方法聲明爲final的代碼不會編譯傳遞到Java 8

這裏的incompatibilities between java 6 and java 7

這裏的incompatibilities between java 7 and java 8

+0

您是否確實已經在Java 8中刪除了方法的示例,據我所知,Java 9中可能會首先刪除不推薦使用的方法,但iirc從未在早期版本中發生過(除非公開API的東西) –

+0

@MarkRotteveel如果一個方法被刪除了,但是肯定有一些方法會改變簽名拋出異常或者將它們改爲final,這樣它們的擴展會導致不可編譯的代碼 –

+0

在我的經驗中,沒有發生(或者至少是:I無法回想起它的任何例子),Java通常在保持向後兼容性方面非常嚴格。過去有些問題伴隨着行爲的變化,或者濫用「錯誤」的人們,後來修復了他們的軟件。 –

2

它通常應該是,因爲大多數功能都是向後兼容的。但是,沒有保證。請遵循正確的流程,並在開始生產之前進行測試。

對於Web容器,使用jdk,版本也會發生變化。這可能會導致一些問題,具體取決於軟件供應商以及您在容器中使用的所有服務(JNDI,連接池等)。我曾經在將應用程序遷移到更高版本的JDK時遇到問題。我們還升級了Websphere。我們使用的是JSF,而更高版本的WAS包含JSF jar包,這與我們的應用程序jar有衝突。

您的應用可能會使用很多可能會受到影響的第三方庫。再次,大多數情況下你應該沒問題,但可能會有小問題。不知道你的應用程序,我只能建議遷移和測試來確認。

0

一個完整的正式名單的完整正式名單你需要非常徹底地測試。如果有錯誤,那麼在進入下一個版本之前,找到它們並修復它們是非常必要的。如果你有一個陽光明媚的日子,並且沒有來自升級的錯誤,那麼至少你在測試之後肯定知道這一點。

但是,您需要知道要關注的內容。您需要閱讀有關在version 7version 8上應用的更改。