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 次 |
最近记录: |