【发布时间】: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来执行,并且会给你那个错误。