2016-09-20 84 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 –