web-dev-qa-db-ja.com

javacコンパイラが見つかりません

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を使用しています。

40
Sarin J S

JDKの/ libディレクトリにあるtools.jarを必要とするjavacタスクを除き、すべてのantスタッフは正常に動作します。その場合、JREでは不十分です。したがって、antからのヒント: "javacコンパイラが見つかりません; ..."

Eclipseを使用する場合、デフォルト設定はJREインストールを指します。
したがって、Eclipseを初めて起動した後の最初の手順の1つは次のようになります。
Window > Preferences > Java > Installed JREsそして、設定をJREからJDKに変更します。
別の方法:
Window > Preferences > Ant > Runtime > Classpath > Global Entries
JDK/libフォルダーからtools.jarを追加します

68
Rebse

同じ問題がありました。私の場合、Java_HOMEをJDK\binフォルダーではなくJDKフォルダーにポイントすることで修正しました。

11

現在、jdkではなく、インストール済みのjreにJava_HOMEを設定しています。現在のJDKをインストールし、Java_HOMEをJDKディレクトリに設定します。

現在のjdkはここにあります http://www.Oracle.com/technetwork/Java/javase/downloads/index.html

9
sandrozbinden

私はこの問題を抱えていました https://stackoverflow.com/a/8406221/8663 修正が良くないと言ってコメントしました。 (実際には、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」に設定されています

cmdプロンプトで@ check @

セット
Java_HOME = c:\ Java\JDK_v7.0.7

それはちょっと嘘ですよね?

5
John

JDKとJREを同じ場所にインストールするというミスを犯しました。 JDKをインストールすると、JREが自動的にインストールされ、JDKと同じ場所を誤って選択しました。

これにより、Eclipseでかなりの混乱が生じました。

JDKとJREをdifferentの場所にインストールします。

3
rainecc

これは、ほとんどの初心者にとってよくある間違いです。

JREは、Javaベースのコード/アプリケーションを実行するためのものです。

Javaコードをコンパイルする場合は、JDKを使用する必要があります。

したがって、環境変数を開き、Java_HOMEパスをJREではなくJDKフォルダーに設定します screen shot of env variables

1
Basil

Antを使用してJavaベースのツールをインストールしようとしたときにこのエラーが発生しました。

〜/ .bash_profileの$ Java_HOME環境変数が/usr/lib/jvm/Java-1.8.0-openjdk-1.8.0.141-1.b16.el7_3.x86_64/jreに設定されました

Jreを削除し(1つ上のディレクトリレベルに移動)、$ Java_HOME、/ usr/lib/jvm/Java-1.8.0-openjdk-1.8.0.141-1.b16.el7_3.x86_64 /を作成することで、この問題を修正しました。

変更を加えた後、〜/ .bash_profileを実行することを忘れないでください! HTH

0
ashish makani