[英]Unable to find a javac compiler
我正在嘗試使用Ant將我的Web應用程序打包到war文件中。
當我構建時,我收到以下錯誤:
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>
如何編譯沒有主類的類文件?
如何設置類路徑?
作為參考,我正在使用Eclipse。
除了javac任務需要位於JDK的/ lib目錄中的tools.jar之外,所有的ant東西都能正常工作,在這種情況下JRE是不夠的。 因此來自ant的提示:“無法找到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目錄。
你會在這里找到當前的jdk http://www.oracle.com/technetwork/java/javase/downloads/index.html
我遇到了這個問題,並在https://stackoverflow.com/a/8406221/866333上發表評論說修復不好。 (實際上是報道說JAVA_HOME是別的東西,所以我建議腳本改變它)。
正如他們的答復所述,編制者並不撒謊。
所以,我最終發現我的舊JAVA_HOME
變量類似於JDK_v7.0.7,當我剛刪除它(從2012恢復DVD)並更新為類似JDK_v7.7.1。 為什么它認為適合回退到JRE,假設它是一種方便。
例如
JAVA_HOME = c:\\ Java \\ JDK_v7.0.7
也許JAVA_HOME並沒有指向JDK。 它目前設置為“C:\\ Program Files \\ Java \\ jre7”
組
JAVA_HOME = c:\\ Java \\ JDK_v7.0.7
所以有點謊言不是嗎?
我犯了將JDK和JRE安裝到同一位置的錯誤。 安裝JDK會自動安裝JRE,我無意中選擇了與JDK相同的位置。
這引起了日食的相當大的混亂。
將JDK和JRE安裝到不同的位置。
我在嘗試使用ant安裝基於java的工具時遇到此錯誤。
我的$ JAVA_HOME環境變量,在〜/ .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-0.8.0-openjdk-1.8.0.141-1.b16.el7_3.x86_64/,修復了我的問題。
在做出改變之后,不要忘記運行源〜/ .bash_profile! HTH
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.