Javac与1.7的交叉编译
伙计们,
我正在尝试使用Ant和终端上的Javac Cross编译。 在本地和集成环境中,我在最基本的问题上遇到了同样的问题。
我在linux终端中运行它(以及我在windows和cmd上的cygwin):
javac -target 1.6 -source 1.7 -bootclasspath /usr/java/jdk1.6.0_27/jre/lib/rt.jar Main.java
与Main.java只有System.out.println。
javac -version ==> javac 1.7.0_11
我收到错误消息:
javac: source release 1.7 requires target release 1.7
我在本地Windows机器上的配置大致相同,结果完全相同。
我的理解是,交叉编译是关于使用更高版本的jdk编译与更高版本jdk兼容的一些源代码,但是传递目标版本的rt.jar,它应该更低。
如果目标和来源相同,那就有效了。
target=1.7 and source=1.7 workd fine target=1.6 and source=1.6 worked just fine
但我想要交叉编译,那么我做错了什么呢?
我感谢所有可以得到的帮助,并提前感谢。
您不能拥有较新版本的源和较低版本的目标。 例如,在Java 5中,语言中添加了许多新function,例如generics,自动装箱,您不能指望JVM 1.4能够理解它。 因此,您必须告诉编译器您的源代码是Java 1.4源代码。 这解释了您的结果。
-target的默认值取决于-source的值:
- 如果未指定-source,则-target的值为1.7
- 如果-source为1.2,则-target的值为1.4
- 如果-source为1.3,则-target的值为1.4
- 如果-source为1.5,则-target的值为1.7
- 如果-source为1.6,则-target的值为1.7
- 对于-source的所有其他值,-target的值是-source的值。
有关更多信息,请参阅http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html
这是javac的限制。 请注意,您可以在旧版本的javac中指定“-target”(而不是-source)。 你可能仍然可以。
您可能需要考虑使用Eclipse Java编译器(ecj)作为独立编译器,作为maven插件使用,也可以由ant脚本中的javac任务使用。
有关详细信息,请参阅http://help.eclipse.org/indigo/topic/org.eclipse.jdt.doc.user/tasks/task-using_batch_compiler.htm 。