我正在使用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。
答案 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,则可以通过以下步骤实现:
右键单击ant构建文件(build.xml
)中的任务。
将鼠标悬停在“运行方式”上,点击“外部工具配置...”。
将以下内容添加到“参数”:
-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)
答案 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