【问题标题】:Ant: Class not found: javac1.8蚂蚁:找不到类:javac1.8
【发布时间】:2014-06-19 23:49:35
【问题描述】:

我正在尝试在 Eclipse 中使用 Ant 构建一个项目。我右键单击 build.xml > Run As > Ant Build。但是,我收到以下错误:

BUILD FAILED
C:\Users\David\eclipse\test-project\build.xml:26: Class not found: javac1.8

还有一个警告:

compile:
[javac] C:\Users\David\eclipse\test-project\build.xml:26: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds

正如我在其他帖子中读到的,这可能是由于 ant 版本太旧或没有正确设置环境变量,这里是所有信息:

C:\>java -version
java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)

C:\>ant -version
Apache Ant(TM) version 1.9.3 compiled on December 23 2013

C:\>echo %JAVA_HOME%
C:\Program Files\Java\jdk1.8.0_05

C:\>echo %JRE_HOME%
C:\Program Files\Java\jre8

编辑: 这是整个 build.xml,第 26 行是 javac 标签:

<?xml version="1.0"?>
<project name="test-project" default="main" basedir=".">
  <!-- Sets variables which can later be used. -->
  <!-- The value of a property is accessed via ${} -->
  <property name="src.dir" location="src" />
  <property name="build.dir" location="bin" />
  <property name="dist.dir" location="dist" />
  <property name="docs.dir" location="docs" />

  <!-- Deletes the existing build, docs and dist directory-->
  <target name="clean">
    <delete dir="${build.dir}" />
    <delete dir="${docs.dir}" />
    <delete dir="${dist.dir}" />
  </target>

  <!-- Creates the  build, docs and dist directory-->
  <target name="makedir">
    <mkdir dir="${build.dir}" />
    <mkdir dir="${docs.dir}" />
    <mkdir dir="${dist.dir}" />
  </target>

  <!-- Compiles the java code (including the usage of library for JUnit -->
  <target name="compile" depends="clean, makedir">
    <javac srcdir="${src.dir}" destdir="${build.dir}">
    </javac>
  </target>

  <!-- Creates Javadoc -->
  <target name="docs" depends="compile">
    <javadoc packagenames="src" sourcepath="${src.dir}" destdir="${docs.dir}">
      <!-- Define which files / directory should get included, we include all -->
       <fileset dir="${src.dir}">
                <include name="**" />
           </fileset>
    </javadoc>
  </target>

  <!--Creates the deployable jar file  -->
  <target name="jar" depends="compile">
    <jar destfile="${dist.dir}\test-project1.jar" basedir="${build.dir}">
      <manifest>
        <attribute name="Main-Class" value="test.Main" />
      </manifest>
    </jar>
  </target>

  <target name="main" depends="compile, jar, docs">
    <description>Main target</description>
  </target>

</project> 

【问题讨论】:

  • 向我们展示您的 build.xml 并指出第 26 行。
  • Ant 使用编译器适配器来调用 Javac 编译器。对于现代构建,适配器是根据 Java 版本确定的,因此使用 Java 1.8 将尝试使用适配器 javac1.8,除非 build.compiler 属性或 compiler 属性是定义。该适配器仅在 Ant 1.8.3 或更高版本中可用。 includeantruntime 警告告诉 javac 任务在编译期间 Ant jar 文件是否应该在路径中,默认为 true。建议将其设置为 false,以便您只选择您要选择的环境。
  • 好的,刚刚看到您使用的是 1.9.3,所以应该没问题。你能用 -d 标志运行 Ant 并查看 ant 认为环境是什么吗?
  • 是的,我正在使用最新的 ant 版本。我将只使用我在答案中发布的 jdk 1.7。
  • 您设置了$JAVA_HOME 吗?如果是这样,$JAVA_HOME/javac -version 有什么作用吗?只需确保您使用的是 JDK 而不是 JRE。 JRE 不会有 javac 来执行,并且会给你那个错误。

标签: java eclipse ant


【解决方案1】:

确保您的源文件位于“ProjectDirectory/src”中。

【讨论】:

  • 它们在“test-project/src”中。虽然在子文件夹中,但这不是问题。
  • 当您尝试javac -version 时?
  • 哦 jdk/bin 路径不在 PATH 变量中,所以 javac -version 不起作用。但是我将它添加到环境变量中,然后 javac -version 给出了这个: javac 1.8.0_05 但是,用 ant 构建仍然不起作用。
【解决方案2】:

在问这个问题之前我已经做了一些广泛的谷歌搜索,但我继续找到解决方案here: 这个问题似乎只在使用 JDK 1.8 时出现,因此使用 JDK 1.7 可以解决问题。需要在eclipse.ini中添加以下行:

-vm "path-to-jdk-1.7\bin\javaw.exe"

【讨论】:

  • 为什么我们不能使用JDK 1.8?
【解决方案3】:

与您的 Eclipse 版本捆绑的 Ant 版本与 Java 1.8 不兼容。

转到Ant download page,并将最新版本提取到您的文件系统的适当位置。

在 Eclipse 中,转到 Window &gt; Preferences &gt; Ant &gt; Runtime,单击 Ant Home... 按钮,然后选择您将新下载的 Ant 解压缩到的位置。

【讨论】:

  • 今天Ant最新版本是1.9.6。但是,它仍然不适用于 java 1.8。
  • Ant 1.9.6 当然支持 Java 8。事实上,Ant has had Java 8 support since 1.9.1。如果 Ant 1.9.6 不适合您,可能是您的配置存在不同的问题。
【解决方案4】:

先生。斯塔德罗是对的。我刚刚在 Ubuntu 14.04 上确认了一个示例

sudo apt-get install ant
ant -version
Apache Ant (TM) Version 1.9.3 compiled on April August 2014

在 Eclipse 中完美运行,只需按照 studro 先生描述的步骤在 Eclipse 中使用“/usr/share/ant”配置“Ant Home”。
问候,Stéphane。

【讨论】:

    【解决方案5】:

    我认为,您看到的是 Ant Bug 53347(请参阅 https://issues.apache.org/bugzilla/show_bug.cgi?id=53347)。

    如果是这样,请尝试以下解决方法:

    将属性“build.compiler”设置为有意义的值,例如“javac1.7”或“javac1.3”。

    将构建脚本的“javac”元素的“compiler”属性设置为上述任一值。 有关所有可能的值及其含义,请参阅http://ant.apache.org/manual/Tasks/javac.html

    【讨论】:

      【解决方案6】:

      为了更清楚。

      1>设置 JAVA_HOME,JRE_HOME 并将 Ant 更新为 1.9

      2>在 build.xml 上单击鼠标右键 => 运行为(这将进入配置)==>现在在此编辑配置中并启动弹出窗口

      选择主选项卡,然后选择名为“参数”的第三个表单字段 添加:

      -Dbuild.compiler=javac1.7
      

      3> 在 build.xml 中添加 includeantruntime="false"

      <javac srcdir="${src}" destdir="${bin}" debug="true" encoding="ISO-8859-1" includeantruntime="false">
              <classpath refid="my.classpath"/>
      </javac>
      

      它应该在没有任何消息的情况下编译

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-28
        • 2017-09-13
        • 2015-05-30
        • 2013-12-25
        • 1970-01-01
        • 2014-01-09
        • 2013-10-11
        • 1970-01-01
        相关资源
        最近更新 更多