Ant使用的是错误的java版本

时间:2009-06-04 10:16:39

标签: java ant

我正在使用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。

17 个答案:

答案 0 :(得分:71)

刚出现这个问题,发生这种情况是因为当默认JRE为1.6时,我首先将构建文件添加到ant-view。

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

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

答案 1 :(得分:29)

在Eclipse中:

  • 右键单击build.xml

  • 点击“运行方式”,点击“外部工具配置...”

  • 选择标签 JRE 。选择您正在使用的JRE。

重新执行任务,现在应该没事了。

答案 2 :(得分:19)

根据ant manual,设置JAVA_HOME应该有效 - 你确定蚂蚁可以看到更改的设置吗?

或者,您可以使用JAVACMD变量。

答案 3 :(得分:15)

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

答案 4 :(得分:15)

您可以使用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" />

答案 5 :(得分:10)

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

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

  2. 将鼠标悬停在“运行方式”上,点击“外部工具配置...”。

  3. 将以下内容添加到“参数”:

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

答案 6 :(得分:5)

这是一个很老的问题,但我会添加我的笔记以供将来参考。

我有类似的问题并通过更改PATH变量中的导出顺序来修复它。

例如,我正在使用一种方法将字符串连接到我的PATH(这只是一个例子):

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

如果我的变量PATH中已经有一个java,那么最后一个值将毫无意义,因此顺序很重要。为了解决这个问题,我开始通过先添加变量,然后添加PATH来反转它。

遵循这个想法我颠倒了ANT_HOME被导出的顺序。在ANT_HOME之前添加JAVA_HOME。

这可能只是巧合,但它对我有用。

答案 7 :(得分:5)

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

答案 8 :(得分:4)

构建文件:

<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

答案 9 :(得分:2)

如果你没有使用eclipse。然后,您可以直接在文件中更改ant java属性,如此处所述。

http://pissedoff-techie.blogspot.in/2014/09/ant-picks-up-incorrect-java-version.html

答案 10 :(得分:1)

如果从eclipse运行Ant,eclipse将使用在类路径(构建路径)中配置的jdk或jre。

答案 11 :(得分:1)

javac代码使用以下2个属性:

fork="yes"  
executable="full-path-to-the-javac-you-want-to-use".

可以找到属性的解释here

答案 12 :(得分:1)

使用所需的java版本(在您的情况下为java 1.5)设置您的JAVA_HOME环境变量,然后在build.xml中使用executable="${JAVA_HOME}/bin/javac"标记内的<javac></javac>设置。

示例:

<target name="java compiler" description="Compiles the java code">
    <javac executable="${JAVA_HOME}/bin/javac" srcdir="./src" 
        destdir="${build.dir}/classes"> 
    </javac> 
</target>

答案 13 :(得分:1)

JAVACMD是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等),以便新的环境变量生效。

答案 14 :(得分:0)

According to the Ant Documentation,设置JAVACMD环境变量以完成您要在其下运行Ant的JRE版本的java.exe的路径。

答案 15 :(得分:0)

默认情况下,Ant会将JRE视为工作空间JRE版本。您需要按照以下要求进行更改。

在Eclipse中:

  • 右键单击build.xml,然后单击&#34;运行方式&#34;,单击&#34;外部工具 配置...&#34;选择标签JRE。

  • 选择您正在使用的JRE。

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

答案 16 :(得分:-1)

如果您的构建文件还没有它(有些有,例如 Apache Tomcat),您可以将 echoproperties 目标添加到 build.xml,例如

<target name="echoproperties">
    <echoproperties/>
</target>

然后您可以运行 ant 任务 echoproperties 并查找“java.version”或 ant -v 并查找“Java 版本”,例如在我的机器上

ant echoproperties | grep java.version

节目

<块引用>

[echoproperties] java.version=11.0.9.1

ant -v | grep -i "java version"

节目

<块引用>

检测到的 Java 版本:11 在:/opt/java/zulu11.43.55-ca-jdk11.0.9.1-linux_x64