Nie można znaleźć kompilatora javac

Próbuję spakować moją aplikację internetową do pliku war za pomocą Ant.

Kiedy buduję, dostaję następujący błąd:

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"
Oto Moja budowa.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>

Jak mogę skompilować plik klasy, który nie ma głównej klasy?

Jak ustawić ścieżkę klasową?

Dla odniesienia, używam Eclipse.

 38
Author: Beau Grantham, 2011-12-06

7 answers

Wszystkie twoje rzeczy ant będą działać dobrze, z wyjątkiem zadania javac, które wymaga narzędzi.jar, znajdujący się w katalogu / lib z JDK, JRE nie jest w tym przypadku wystarczające. Dlatego podpowiedź od ant : "Unable to find a javac compiler;..."

Podczas pracy z Eclipse domyślne ustawienie wskazuje na Twoją instalację JRE.
Tak więc jednym z pierwszych kroków po pierwszym uruchomieniu Eclipse powinno być :
Window > Preferences > Java > Installed JREs I zmienić ustawienia z JRE na JDK.
Alternatywnie użyć :
Window > Preferences > Ant > Runtime > Classpath > Global Entries
i dodaj narzędzia.jar z folderu JDK / lib

 66
Author: Rebse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-14 19:00:41

Miałem ten sam problem. W moim przypadku naprawiłem to, wskazując JAVA_HOME do folderu JDK, a nie do folderu JDK \ bin.

 11
Author: Umar Farooq Khawaja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-01 13:49:53

Aktualnie Ustawiłeś JAVA_HOME na zainstalowane jre zamiast jdk. Zainstaluj bieżący JDK, a następnie Ustaw JAVA_HOME do katalogu JDK.

Aktualny jdk znajdziesz tutaj http://www.oracle.com/technetwork/java/javase/downloads/index.html

 8
Author: sandrozbinden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-17 15:00:31

Miałem ten problem i skomentowałem https://stackoverflow.com/a/8406221/866333 mówiąc, że naprawa nie była dobra. (Właściwie to donosiło, że JAVA_HOME było czymś innym, więc zasugerowałem, że skrypt go zmienia).

W odpowiedzi stwierdzono, że kompilator nie kłamie.

Więc prawda, w końcu zauważyłem moją starą JAVA_HOME zmienna była czymś w rodzaju JDK_v7. 0. 7, kiedy właśnie usunąłem to (z DVD przywracania 2012) i zaktualizowałem do jdk_v7. 7.1. Dlaczego warto się wycofać do JRE, Załóżmy, że to była wygoda.

Eg

JAVA_HOME = c:\Java\JDK_v7.0.7

@uruchamia skrypt...@

Być może JAVA_HOME nie wskazuje na JDK. Obecnie jest ustawiony na "C:\Program Files\Java\jre7"

@sprawdź w CMD prompt@

Zestaw
JAVA_HOME = c:\Java\JDK_v7.0.7

Więc to trochę kłamliwe, prawda?
 5
Author: John,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:11

Popełniłem błąd instalując JDK i JRE w tym samym miejscu. Instalacja JDK automatycznie instaluje JRE i przypadkowo wybrałem to samo miejsce co JDK.

To spowodowało znaczne zamieszanie w eclipse.

Zainstaluj JDK i JRE w różnych lokalizacjach.

 3
Author: rainecc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-22 18:01:06

To a jest częstym błędem większości początkujących,

JRE służy tylko do uruchamiania kodu/aplikacji opartych na Javie.

Jeśli chcesz skompilować kod Javy, musisz użyć JDK.

Więc otwórz zmienne środowiskowe i ustaw ścieżkę JAVA_HOME do folderu JDK zamiast JRE zrzut ekranu zmiennych env

 1
Author: Basil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-10 06:56:15

Otrzymywałem ten błąd podczas próby zainstalowania narzędzia opartego na Javie, używając ant.

Moja zmienna środowiskowa $ JAVA_HOME, w ~/.bash_profile, został ustawiony na / usr/lib/jvm / java-1.8.0-openjdk-1.8.0.141-1.b16.el7_3x86_64 / jre

Poprzez usunięcie jre, (Przejście o jeden poziom katalogu w górę), wykonanie $JAVA_HOME, / usr / lib / jvm / java-1.8.0-openjdk-1.8.0.141-1.b16.el7_3x86_64/, Naprawiono problem dla mnie.

Nie zapomnij uruchomić, źródło ~/.bash_profile, po dokonaniu zmiany ! HTH

 0
Author: ashish makani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-06 06:37:02