Не удалось найти компилятор javac
Я пытаюсь упаковать свое веб-приложение в военный файл, используя Ant.
Когда я создаю, я получаю следующую ошибку:
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.
Ответы
Ответ 1
Все ваши материалы ant будут работать отлично, за исключением задачи javac, которая нуждается в tools.jar, находящейся в каталоге /lib из JDK, JRE недостаточно в этом случае. Поэтому подсказка от ant: "Невозможно найти компилятор javac;..."
При работе с Eclipse установка по умолчанию указывает на установку JRE.
Итак, одним из первых шагов после запуска Eclipse в первый раз должно быть:
Window > Preferences > Java > Installed JREs
и измените настройки с JRE на JDK.
В качестве альтернативы используйте:
Window > Preferences > Ant > Runtime > Classpath > Global Entries
и добавьте tools.jar из папки JDK/lib
Ответ 2
У меня была та же проблема. В моем случае я исправил его, указав JAVA_HOME в папку JDK, а не в папку JDK\bin.
Ответ 3
В настоящее время вы установили JAVA_HOME в установленный jre вместо jdk.
Установите текущий JDK, затем установите JAVA_HOME в каталог JDK.
Здесь вы найдете текущий jdk
http://www.oracle.com/technetwork/java/javase/downloads/index.html
Ответ 4
У меня была эта проблема и прокомментировал fooobar.com/questions/150657/..., что исправление не было хорошим. (На самом деле он сообщал, что JAVA_HOME был чем-то другим, поэтому я предложил, чтобы script менял его).
Как говорится в ответе, компилятор не лежит.
Итак, я в конечном итоге заметил, что моя старая переменная JAVA_HOME
была похожа на JDK_v7.0.7, когда я просто удалил ее (с DVD-диска восстановления 2012 года) и обновил ее до JDK_v7.7.1. Почему он счел нужным вернуться к JRE, предположим, что это было удобство.
например,
JAVA_HOME = c:\Java\JDK_v7.0.7
@runs script... @
Возможно, JAVA_HOME не указывает на JDK. В настоящее время он установлен "C:\Program Files\Java\jre7"
@check при вызове cmd @
набор
JAVA_HOME = c:\Java\JDK_v7.0.7
так что это ложь, не так ли?
Ответ 5
Я допустил ошибку при установке JDK и JRE в том же месте. Установка JDK автоматически устанавливает JRE, и я непреднамеренно выбрал то же место, что и JDK.
Это вызвало значительную путаницу в затмении.
Установите JDK и JRE в разные местоположения.
Ответ 6
Это обычная ошибка большинства новичков,
JRE предназначен только для запуска java-кода/приложений.
Если вы хотите скомпилировать Java-код, вы должны использовать JDK.
Итак, открытые переменные среды и установите путь JAVA_HOME в папку JDK вместо JRE
![снимок экрана из переменных env]()
Ответ 7
Я получал эту ошибку при попытке установить инструмент на основе Java, используя ant.
переменная среды My $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 -1.8.0-openjdk-1.8.0.141-1.b16.el7_3.x86_64/,
исправил проблему для меня.
Не забудьте запустить, source ~/.bash_profile, после внесения изменений!
НТН