簡體   English   中英

無法找到javac編譯器

[英]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

@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,我無意中選擇了與JDK相同的位置。

這引起了日食的相當大的混亂。

將JDK和JRE安裝到不同的位置。

這是大多數初學者的常見錯誤,

JRE僅用於運行基於java的代碼/應用程序。

如果要編譯Java代碼,則必須使用JDK。

所以打開環境變量,並將JAVA_HOME路徑設置為JDK文件夾而不是JRE 屏幕截圖的env變量

我在嘗試使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM