我们可以使用jdk7 javac将java7特性的代码编译成java6字节码

时间:2012-08-31 07:54:46

标签: compatibility java java-7

我正在考虑一个java项目是否可以生成2个jar:一个用于java7,一个用于java6,是的,源代码可能会使用一些java7新功能。

所以要生成java6 jar,命令行就像:

javac -target 1.6 -bootclasspath jdk1.6.0\lib\rt.jar -extdirs "" MyApp.java

不幸的是, 它只是发出一个错误:

javac: target release 1.6 conflicts with default source release 1.7

根据this document,jdk6 vs jdk5应该是可能的,任何人都知道为什么它在jdk7 vs jdk6中不起作用?我做错了什么,还是官方不支持?

感谢。

2 个答案:

答案 0 :(得分:5)

AFAIK,源和目标必须相同。即使对于Java 6.唯一的例外是源可以是1.1和目标1.0。

鉴于最新的JVM for Java 6和Java 7之间的JVM差别不大,我建议您考虑升级。 Java 6也将于2012年11月完成(免费)服务,从现在起三个月......

答案 1 :(得分:2)

即使有可能,这通常也是一个坏主意 - 如果你想确保你的代码可以在java 6上运行,那么你必须在java 6上构建它。每个新版本的java都会在类库中引入新类,并为现有类添加新方法,即使您将java 7编译器设置为生成6兼容字节码,也不会捕获调用7-only方法的情况。