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 。