Ant正在使用错误的Java版本。

84

我正在使用Ant 1.7.0,并安装了JAVA_HOME中的Java 1.6。

我想使用Java 1.5构建一个项目,因此我已将JAVA_HOME导出为我的Java 1.5目录。

java -version

说的是"1.5"版本,但运行Ant时使用的是Java 1.6。


3
你使用的操作系统是什么? - Jon Skeet
2
你可以编写一个批处理脚本来指定如何运行它。如果只是编译,你可以在命令中指定版本,例如:<javac target="1.5" srcdir=.../>。 - James Oravec
请查看此答案,了解有关错误JAVA版本的信息:https://dev59.com/TInda4cB1Zd3GeqPFeVI#61190824 - Harisudha
17个回答

75

刚遇到了这个问题,因为我最初将构建文件添加到ant视图时,默认JRE为1.6。

没有项目特定的JRE,并且我将默认值更改为1.5,即使eclipse在1.5中运行,JAVA_HOME也是1.5。 通过命令行运行ant目标使用的是JRE 1.5,但在eclipse中它仍然使用1.6。

我必须右键单击ant目标,选择“Run As...”并在JRE选项卡下更改JRE。 这个设置会记住后续运行的配置。


8
我刚意识到问题根本没有提到Eclipse。我的答案是针对在使用Eclipse时描述的问题。 - Lee Kowalkowski
3
感谢你结束了几个小时的挫败感。 - Dark Star1
如果您没有使用Eclipse,请查看我在底部的答案。 - Utsav Gupta
我喜欢问题有许多不同环境和用户设置的答案选择。 - Perdomoff

34
在Eclipse中:
  • 右键单击您的build.xml文件

  • 单击“运行为”,再单击“外部工具配置…”

  • 选择选项卡JRE。 选择您正在使用的JRE。

重新运行任务,现在应该没问题了。


25
根据Ant手册,设置JAVA_HOME应该可以起作用——您确定更改的设置对Ant可见吗?
或者,您可以使用JAVACMD变量。

6
我现在自己也遇到了这个问题,JAVA_HOME指向了正确的JDK,但是ant仍然报告了错误的java版本。 - Dark Star1
JAVACMD 作为可执行文件 java.exe 的完整路径对我很有效(win 10)。 - kamil.ka

20

在详细模式下运行 ant:ant -v,并寻找线索。


1
这对我帮助很大。我最初尝试使用jdk 1.8将项目构建为lib。后来发现需要改为在1.7上构建,因此安装了jdk 1.7,更改了JAVA_HOME,但ant仍然使用1.8进行构建。使用ant -v,我发现ant正在正确使用jdk1.7,但是构建由于之前的尝试已经在临时文件夹中省略了所有类。所以我所做的就是删除临时文件夹,它重新创建了它们,这次使用了我想要的jdk 1.7。这可能会帮助某些人。 - Mauro Banze

17

您可以在javac标签上使用target和source属性来设置目标运行时。下面的示例将编译任何源代码到目标版本1.4,在任何支持版本1.4或更高的编译器上。

<javac compiler="classic" taskname="javac" includeAntRuntime="no" fork=" deprecation="true" target="1.4" source="1.4" srcdir="${src}" destdir="${classes}">

注意:'srcdir'和'destdir'是在构建脚本的其他位置设置的属性值,例如:<property name="classes" value="c:/classes" />


11

如果您使用Eclipse IDE,可以通过以下步骤实现:

  1. 在您的ant构建文件(build.xml)中,右键单击任务。

  2. 将鼠标悬停在“Run As”上,然后点击“External Tool Configurations...”。

  3. 将以下内容添加到“Arguments”中:

    -Dant.build.javac.target=1.5 -Dant.build.javac.source=1.5
    

7

构建文件:

<target name="print-version"> 
   <echo>Java/JVM version: ${ant.java.version}</echo> 
   <echo>Java/JVM detail version: ${java.version}</echo> 
</target>

输出:

[echo] Java/JVM version: 1.5
[echo] Java/JVM detail version: 1.5.0_08

6
你可以在 javac 任务中指定你想要使用的兼容级别(1.4,1.5,1.6)。你可以设置“源”和“目标”级别值。查看文档,请点击此处: Javac 任务文档

1
为了保证兼容性,在编译时还需添加“-bootclasspath”选项。 - Andrew Thompson

5

这是一个比较老的问题,但我会为将来的参考添加我的笔记。

我曾经遇到过类似的问题,并通过更改PATH变量中导出的顺序来解决它。

例如,我通过以下方式将字符串连接到我的PATH中(这只是一个示例):

$> export PATH='$PATH:'$JAVA_HOME

如果我的变量 PATH 已经包含了 Java,那么最后一个值就没有意义了,因此顺序很重要。为了解决这个问题,我开始反转它,先添加我的变量,然后再添加 PATH。
按照这个想法,我反转了导出 ANT_HOME 的顺序,先添加 JAVA_HOME,再添加 ANT_HOME。
这可能只是巧合,但对我起作用了。

这也发生在我身上。我不确定哪个条目与JAVA_HOME冲突,但当我把它放在PATH的开头时,它就起作用了。 - Inversus

3

JAVACMD 是 Ant 特定的环境变量。Ant 文档中说:

JAVACMD——Java 可执行文件的完整路径。使用它来调用与 JAVA_HOME/bin/java(.exe) 不同的 JVM。

因此,如果你的 java.exe 完整路径是:C:\Program Files\Java\jdk1.8.0_211\bin\java.exe,创建一个名为 JAVACMD 的新环境变量,并将其值设置为上述路径(包括 \java.exe)。请注意,您需要关闭并重新打开终端(cmd、Powershell 等),以使新环境变量生效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接