蚂蚁使用错误的Java版本


74

我正在使用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
您使用什么操作系统?
乔恩·斯基特

1
您可以编写批处理脚本以确切指定其运行方式。如果只是编译,则可以在命令中指定版本,例如:<javac target =“ 1.5” srcdir = ... />
James Oravec 2013年

Answers:


73

刚遇到这个问题,是因为我在默认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。记住此设置以供后续运行。


7
我刚刚意识到这个问题根本没有提到Eclipse。我的答案是使用Eclipse时所描述的问题。
Lee Kowalkowski

2
感谢您结束数小时的挫败感。
黑暗之星2013年

如果您不使用Eclipse,请在底部查看我的答案。
Utsav Gupta 2014年

我喜欢问题如何针对我们的用户的不同环境和设置提供多种答案。
Perdomoff

33

在Eclipse中:

  • 右键单击您的build.xml

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

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

重新运行任务,现在应该可以了。


21

根据ant手册,设置JAVA_HOME应该可以工作-您确定更改后的设置对ant可见吗?

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


2
我自己有atm问题,JAVA_HOME指向正确的JDK,但是ant仍报告错误的Java版本。
黑暗之星2013年

JAVACMD作为可执行文件java.exe的完整路径为我工作(赢得10)
kamil.ka,2018年

16

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


15

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


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

11

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

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

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

  3. 在“参数”中添加以下内容:

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

6

生成文件:

<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

5

您还可以在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导出的顺序。在ANT_HOME之前添加JAVA_HOME。

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


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


1

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


默认情况下是,但是可以为每个ant文件配置不同的文件,因此检查每个文件都至关重要……
Nick Russler 2012年

7
要确定是否使用了哪个Java版本的ant,请执行以下操作:<echo message="Ant java version: ${ant.java.version}" />
dmolony 2013年

对我来说,了解$ {ant.java.version}是一件很棒的事情,谢谢!
javydreamercsw

我在哪里把它放在build.xml中?
jesses.co.tt

1

javac标记使用以下2个属性:

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

这里可以找到有关属性的说明


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



0

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

在Eclipse中:

  • 右键单击build.xml,单击“运行方式”,单击“外部工具配置...”,选择选项卡JRE。

  • 选择您正在使用的JRE。

  • 重新运行任务,现在应该可以了。


0

JAVA_HOME使用所需的Java版本(在您的情况下为Java 1.5)设置环境变量,然后在内部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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.