【问题标题】:Ant is using wrong java versionAnt 使用了错误的 java 版本
【发布时间】:2010-10-31 06:49:26
【问题描述】:

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

【问题讨论】:

  • 你使用的是什么操作系统?
  • 您可以编写一个批处理脚本来准确指定如何运行它。如果它只是编译,您可以在命令中指定版本,例如:
  • 查看this answer JAVA 版本错误

标签: java ant


【解决方案1】:

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

【讨论】:

  • 我刚刚意识到这个问题根本没有提到 Eclipse。我的答案是针对使用 Eclipse 时所描述的问题。
  • 感谢您结束几个小时的挫败感。
  • 如果您不使用 eclipse,请在底部查看我的答案。
  • 我喜欢针对不同环境和用户设置的问题有多种答案。
【解决方案2】:

在 Eclipse 中:

  • 右键单击您的 build.xml

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

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 我自己的 atm 有这个问题,并且 JAVA_HOME 指向正确的 JDK,但是 ant 仍然报告错误的 java 版本。
    • JAVACMD 作为可执行 java.exe 的完整路径为我工作(win 10)
    【解决方案4】:

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

    【讨论】:

    • 这对我帮助很大。我首先尝试使用 jdk 1.8 将项目构建到 lib 中。后来我发现我需要在 1.7 上构建它,所以安装了 jdk 1.7,更改了 JAVA_HOME 但仍然 ant 继续用 1.8 构建它。使用ant -v 我发现ant 正确使用了jdk1.7,但是构建忽略了临时文件夹中的所有类,因为它们已经存在,因为我之前的尝试。所以我所做的就是删除临时文件夹,然后重新创建它们,这次使用 jdk 1.7 就像我想要的那样。可能会帮助某人
    【解决方案5】:

    您可以使用 javac 标记上的目标和源属性来设置目标运行时。下面的示例将在任何支持 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”是在构建脚本的其他位置设置的属性值, 例如&lt;property name="classes" value="c:/classes" /&gt;

    【讨论】:

      【解决方案6】:

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

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

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

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

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

      【讨论】:

        【解决方案7】:

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

        【讨论】:

        • 为了保证兼容性,编译时还要加上-bootclasspath选项。
        【解决方案8】:

        构建文件:

        <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】:

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

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

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

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

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

          按照这个想法,我颠倒了 ANT_HOME 的导出顺序。在 ANT_HOME 之前添加 JAVA_HOME。

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

          【讨论】:

          • 这也发生在我身上。我不确定哪个条目与 JAVA_HOME 冲突,但是当我将它放在 PATH 的开头时,它起作用了。
          【解决方案10】:

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

          【讨论】:

            【解决方案11】:

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

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

            【讨论】:

              【解决方案12】:

              javac 标签使用以下两个属性:

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

              属性说明可查看here

              【讨论】:

                【解决方案13】:

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

                【讨论】:

                • 默认情况下是的,但它可以为每个 ant 文件进行不同的配置,因此检查每个文件可能至关重要...
                • 确定 ant 使用的 java 版本:&lt;echo message="Ant java version: ${ant.java.version}" /&gt;
                • 了解 ${ant.java.version} 对我来说是件好事,谢谢!
                • 我会把它放在 build.xml 的什么地方?
                【解决方案14】:

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

                示例:

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

                【讨论】:

                  【解决方案15】:

                  According to the Ant Documentation,将JAVACMD 环境变量设置为您要运行Ant 的JRE 版本的java.exe 的完整路径。

                  【讨论】:

                    【解决方案16】:

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

                    在 Eclipse 中:

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

                    • 选择您正在使用的 JRE。

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

                    【讨论】:

                      【解决方案17】:

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

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

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

                      ant echoproperties | grep java.version
                      

                      表演

                      [回声属性] 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

                      【讨论】:

                        猜你喜欢
                        • 2015-02-09
                        • 1970-01-01
                        • 2021-05-22
                        • 2018-09-30
                        • 1970-01-01
                        • 1970-01-01
                        • 2019-05-07
                        • 1970-01-01
                        • 2020-06-27
                        相关资源
                        最近更新 更多