作為子產品系統的一部分正在進行的遷移,corba和其他的java ee子產品在java 9更新時将不會包含在預設的類路徑中。這些子產品依然能夠擷取,但是開發者們需要使用特定的指令行指令才能夠使用它們。這個變化隻會影響到非子產品化的、以java 9為目标系統的應用,因為子產品化的應用已經需要詳細指出它們依賴的子產品。
正如“子產品系統的情形” 中解釋的那樣,子產品化在java 9中的附加功能不會強制開發者直接使用它們,反而,java 9中提供了一定數量的向後相容選項。其中一個允許在java 9中完成傳統的、非子產品化的代碼。其中為了它能夠正常工作,非子產品化的代碼需要被添加至編譯器,作為一個特殊的子產品,叫做“未命名子產品”,它預設顯示了所 有包含的包并且沒有詳述的依賴。
不幸的是,未命名子產品沒有任何明确的依賴關系,這會給子產品分解帶來很大的挑戰。在一個子產品化的java應用中,正在被編譯的子產品會有一個明确的所需 要的依賴關系清單。編譯器可以使用這些資訊,伴随着依賴關系中的依賴,來計算出一個圖表,其中包括所有被編譯子產品直接或間接需要的所有子產品的傳遞閉包。而 未命名子產品沒有标明任何依賴,是以它不能被用于計算子產品圖表的根節點。
為了修正這個問題,java 9将會使用一些預設值作為将代碼編譯入未命名子產品的根子產品。在最新的修改中,這個預設根子產品已經從java.se.ee遷移到java.se,這意味着所有的java ee擴充現在都預設不能使用了。這個修改會幫助預防包含它們自己的java ee包實作的應用伺服器中的沖突。
那些想要遷移至java 9但是還沒有做好重寫他們應用每個子產品系統的準備的人可以仍然将這些依賴添加回類路徑,通過在編譯或運作應用時使用指令行指令“-addmods ”。