Ada*_*Lee 40 java compilation javac backwards-compatibility
使用Java compiler(javac)时,我们可以指定两种兼容性.一个是使用-source,另一个是使用-target.这两者有什么区别?
例如,-source 1.5和-target 1.6?
此外,是否有任何我们使用不同的源和目标兼容级别的情况?
ska*_*man 34
来自javac文档:
-source指定接受的源代码版本.
-target生成以指定版本的VM为目标的类文件.类文件将在指定的目标和更高版本上运行,但不会在早期版本的VM上运行.
在你的例子中:
-source 1.5 and -target 1.6
Run Code Online (Sandbox Code Playgroud)
这将用于确保源代码与JDK 1.5兼容,但应生成用于JDK 1.6及更高版本的类文件.
相当为什么你会做,这是另一回事.
rap*_*aëλ 11
这-source表明您的源代码具有什么级别的合规性:您使用的是注释吗?那你至少需要1.5; 你@override在接口实现上使用,你需要1.6等等
在-target指定了Java版本要能够在运行的类.您可以使用Java SE 7编译器并编译以在Java SE上运行1.5.
这对于生成使用旧版Java的jar文件非常有用.我相信到目前为止所有JDK都能够执行旧版本,所以没有真正的理由让目标比源更大.
然而,target在使用1.7 JDK时设置为例如1.6 确实有意义.
我不确定,但我相信它可以在某些情况下使用1.7编译器编译1.7 java代码到1.6 jar,例如表达式如
ArrayList<Integer> foo = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
仅在1.7+源版本中有效的应编译为1.6兼容字节代码.但我还没有验证编译器是否真的会这样做.不幸的是,这似乎并未在实践中实施.
| 归档时间: |
|
| 查看次数: |
17131 次 |
| 最近记录: |