无法find一个javac编译器

我正在尝试使用Ant将我的Web应用程序打包成war文件。

当我build立时,我得到以下错误:

C:\Documents and Settings\Administrator\workspace\Assignment7\build.xml:67: Unable to find a javac compiler; com.sun.tools.javac.Main is not on the classpath. Perhaps JAVA_HOME does not point to the JDK. It is currently set to "C:\Program Files\Java\jre6" 

以下是我的build.xml

 <?xml version="1.0" encoding="UTF-8"?> <project name="Generate War" default="install" basedir="."> <property name="build.dir" value="build"/> <property name="dir.name" value="Assignment7"/> <property name="package.name" value="${dir.name}.war"/> <property name="content" value="webContent"/> <property name="web-inf" value="${content}\WEB-INF"/> <property name="meta-inf" value="${content}\META-INF"/> <property name="jsp.dir.name" value="${content}"/> <property name="lib" value="${web-inf}\lib"/> <property name="src" value="src"/> <property name="dest.dir" value="target"/> <!-- Setting path to the server webapp folder --> <property name="webapp.dir" value="C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps"/> <!-- Using temp folder for convinence --> <property name="temp.dir" value="temp"/> <property name="temp.dir.web-inf" value="${temp.dir}\WEB-INF"/> <property name="temp.dir.meta-inf" value="${temp.dir}\META-INF"/> <property name="temp.dir.lib" value="${temp.dir.web-inf}\lib"/> <property name="temp.dir.classes" value="${temp.dir.web-inf}\classes"/> <!--<property name="temp.dir.classes.dir" value="${temp.dir.classes}\**"/>--> <property name="package.file" value="${dest.dir}\${package.name}"/> <path id="build.class.path"> <fileset dir="${lib}"> <include name="**/*.jar"/> </fileset> </path> <path id="build.class.path1"> <fileset dir="C:\program files\java\jre6\lib"> <include name="**/*.jar"/> </fileset> </path> <target name="clean"> <delete> <fileset dir="${dest.dir}" includes="**/*"/> </delete> <delete dir="${temp.dir}"/> <delete dir="${temp.dir.classes}"/> <delete dir="${temp.dir.web-inf}"/> <delete dir="${temp.dir.meta-inf}"/> </target> <target name="prepare" depends="clean"> <mkdir dir="${dest.dir}"/> <mkdir dir="${temp.dir}"/> <mkdir dir="${temp.dir.web-inf}"/> <mkdir dir="${temp.dir.lib}"/> <mkdir dir="${temp.dir.classes}"/> <mkdir dir="${temp.dir.meta-inf}"/> </target> <target name="compile" depends="prepare"> <echo>==="complie"===</echo> <javac srcdir="${src}" destdir="${temp.dir.classes}" debug="on"> <classpath refid="build.class.path"></classpath> </javac> <!--<copydir src="${build.dir}\classes" dest="${temp.dir.classes}"/>--> </target> <target name="package" depends="compile"> <echo>"PACKAGING THE FILES"</echo> <copy file="${meta-inf}\MANIFEST.MF" tofile="${temp.dir.meta-inf}\MANIFEST.MF" overwrite="true"/> <copy file="${web-inf}\web.xml" tofile="${temp.dir.web-inf}\web.xml" overwrite="true"/> <copy file="${web-inf}\tiles.xml" tofile="${temp.dir.web-inf}\tiles.xml" overwrite="true"/> <copy todir="${temp.dir.classes}"> <fileset dir="${src}"> <include name="**/*.xml"/> </fileset> </copy> <war destfile="${package.file}" webxml="${temp.dir.web-inf}\web.xml" basedir="${temp.dir}"> <fileset dir="${jsp.dir.name}"/> <lib dir="${lib}"></lib> <classes dir="${temp.dir.classes}"></classes> </war> </target> <target name="jsps"> <copy todir="${webapp.dir}\${dir.name}"> <fileset dir="${content}"> <include name="**/*.jsp"/> <include name="**/*.html"/> <include name="**/*.css"/> <include name="**/*.gif"/> <include name="**/*.jpg"/> <include name="**/*.png"/> <include name="**/*.js"/> </fileset> </copy> </target> <target name="install" depends="package"> <copy file="${package.file}" todir="${webapp.dir}" overwrite="true"/> </target> </project> 

我如何编译一个没有主类的类文件?

我如何设置类path?

作为参考,我正在使用Eclipse。

除了需要位于JDK的/ lib目录中的tools.jar的javac任务之外,所有的ant工具都能正常工作,在这种情况下,JRE是不够的。 因此,从ant的提示:“无法find一个javac编译器; …”

使用Eclipse时,默认设置指向您的JRE安装。
所以,第一次启动Eclipse后的第一步应该是:
Window > Preferences > Java > Installed JREs ,并将设置从JRE更改为JDK。
或者使用:
Window > Preferences > Ant > Runtime > Classpath > Global Entries
并从JDK / lib文件夹中添加tools.jar

我有同样的问题。 在我的情况下,我通过将JAVA_HOME指向JDK文件夹而不是JDK \ bin文件夹来修复它。

目前,您已将JAVA_HOME设置为安装的jre,而不是jdk。 安装当前的JDK,然后将JAVA_HOME设置到您的JDK目录。

你会在这里find当前的jdk http://www.oracle.com/technetwork/java/javase/downloads/index.html

我有这个问题,并在https://stackoverflow.com/a/8406221/866333评论说,修复是不好的&#x3002; (实际上是报告说JAVA_HOME是别的,所以我build议一个脚本改变它)。

正如他们的答复所言,编译器不会说谎。

所以,我最终发现我的旧JAVA_HOMEvariables是JDK_v7.0.7,当我刚删除(从2012年恢复DVD),并更新为像JDK_v7.7.1。 为什么它看起来适合回落到JRE,假设这是一个方便。

例如

JAVA_HOME = c:\ Java \ JDK_v7.0.7

@runs脚本… @

也许JAVA_HOME不指向JDK。 它目前设置为“C:\ Program Files \ Java \ jre7”

@check at cmd prompt @


JAVA_HOME = c:\ Java \ JDK_v7.0.7

所以这是有点谎言是不是?

我犯了安装JDK和JRE到相同位置的错误。 安装JDK会自动安装一个JRE,而我无意中select了与JDK相同的位置。

这在日食中引起了相当大的混乱。

将JDK和JRE安装到不同的位置。

这是大多数初学者常犯的错误,

JRE仅用于运行基于Java的代码/应用程序。

如果你想编译java代码,你必须使用JDK。

所以打开环境variables,并将JAVA_HOMEpath设置为JDK文件夹而不是JRE env变量的屏幕截图

我试图安装基于Java的工具,使用ant时,出现此错误。

我的$ JAVA_HOME环境variables在〜/ .bash_profile中被设置为/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-1.b16.el7_3.x86_64/jre

通过删除jre(进入一个目录级别),制作$ JAVA_HOME,/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-1.b16.el7_3.x86_64/,为我解决了这个问题。

改变之后不要忘了运行source〜/ .bash_profile! HTH