2016-09-20 82 views
3

我意識到這不是100%相關,但我對此很好奇。 在JDK8中,不贊成使用javac參數「source」和「target」,並將在JDK9中將其刪除。 作爲一名JavaME開發人員,我想知道如何才能夠定位到較老的平臺。例如,我在開發藍光時使用的是目標1.3。如果沒有「目標」選項,當JDK9出現時,如何編譯我的Xlet以用於藍光?我想,還必須有其他人(儘管我們可以認同的不是很多),但仍需要針對較老的設備。當JDK9不在時我們做什麼?如何使用JDK9定位較舊的平臺? (目標:1.3)

編輯:它甚至有可能將目標1.3與JDK9?

回答

5

要回答「如何在沒有目標選項的情況下編譯」這個問題,新的-release標誌是-source和-target的一個更安全和更可靠的替代方案。有關更多詳細信息,請參閱JEP-247。您將以-source和-target相同的方式將目標鎖定在較舊的平臺上。

「源和目標將在JDK9中刪除」的語句有點類似但不完全:-source和-target標誌本身不會被刪除,但是它們用於指定特定的舊版本已被棄用。從JEP-182:「在JDK 9中,對1.5或更低版本的源或目標的支持將被刪除。」

要回答這個問題,「甚至有可能以JDK9爲目標1.3」?答案是關於-release標誌,JDK9不會編譯爲1.3。

從javac的-help:

--release <release> 
     Compile for a specific VM version. Supported targets: 6, 7, 8, 9 

你最好的選擇是使用舊版本的JDK進行編譯。如果您需要以1.3爲目標,那麼無論如何都沒有太多理由使用Java 9編譯器。

+0

這很好消息雖然有點令人費解。他們爲了降低javac的維護成本而刪除「源」和「目標」 - 然後引入另一個基本相同的參數? 噢,只要我可以將我的Xlets編譯爲兼容藍光的jar文件,那麼我很高興。我想時間會告訴我這個新方法是否做了不同的事情,這使得我的jar文件與藍光規格不兼容。 –

+0

來自JEP:「默認情況下,javac會針對最新版本的平臺API進行編譯,因此編譯後的程序可能意外地使用了當前版本的平臺提供的API,這些程序無法在舊版本的平臺上運行,不管傳遞給-source和-target選項的值如何。這是一個長期的可用性痛點,因爲用戶期望通過使用這些選項,他們將獲得可以在指定平臺版本上運行的類文件。「 – Jay

+0

只需要清楚新標誌具有非常特定的原因,這是對原始標誌的改進,它們不僅僅是改變東西,因爲他們覺得它是這樣的:) – Jay

1

我不知道-source-target在Java 8中被棄用,並在Java 9中被刪除 - 早期的訪問版本(至少9-b131)仍然有它們。你有這方面的來源嗎?

我知道的那個區域唯一的變化是JEP 247,它引入了-release,這對另外兩個來說是一種捷徑。

+0

我之前發現這個:http://openjdk.java.net/jeps/182 –

+0

你應該提出一個新的問題,關注[JEP 182]中描述的「one + three back」規則(http: //openjdk.java.net/jeps/182)。 – Nicolai

+0

沒有必要,如果新的「釋放」標誌讓我回到1.3 –