我需要使用ANT(1.7.0)编译一个JAR文件,以运行一个特定版本的Java(1.5)。我的机器上现在有1.6个Java。我试过设置:

<target name="compile">
  <javac compiler="javac1.5" target="1.5" srcdir=.../>
</target>

我也把

<property name="build.compiler" value="modern"/>

也没有属性文件。我正在运行Linux/suse的Java1.6

还有一个简单的方法来确定JAR文件中预期的Java版本。


使用"目标"属性并删除"编译器"属性。看 在这里 .所以应该是这样的:

<target name="compile">
  <javac target="1.5" srcdir=.../>
</target>

应指定源和目标。我建议提供 Ant默认值 ,这样,您就不需要为每个JavAC任务指定源/目标属性:

<property name="ant.build.javac.source" value="1.5"/>
<property name="ant.build.javac.target" value="1.5"/>

Java交叉编译说明 获取更多信息。


为了在我使用的类文件中找到Java的版本:

javap -verbose <classname>

一开始就宣布了这个版本

minor version: 0
major version: 49

相当于java1.5


你也可以{{ant.build.javac.target=1.5}} 更新任务的默认目标版本.看 网站/手册/Javacp.html#目标


我也不得不使用源和类路径属性。看 在这里 用于交叉编译示例。(与蚂蚁的属性直接对应)

如果能修改一下答案source 和bootclasspath

它可以帮助使用遗留应用程序。