Ошибка сборки Maven: «Не удалось найти компилятор Javac в: jre или jdk issue»


112

У меня JAVA_HOME установлен на:

C:\Program Files (x86)\Java\jdk1.6.0_18

После запуска maven installя получаю от Eclipse сообщение :

Причина:

Unable to locate the Javac Compiler in:
  C:\Program Files (x86)\Java\jre6\..\lib\tools.jar
Please ensure you are using JDK 1.4 or above and
not a JRE (the com.sun.tools.javac.Main class is required).
In most cases you can change the location of your Java
installation by setting the JAVA_HOME environment variable.

Я уверен, что это сложная часть

Убедитесь, что вы используете JDK 1.4 или выше, а не JRE

Когда я запускаю конфигурацию, он установлен на JRE6. Как мне изменить его на JDK 1.6, который я уже установил?

Я даже пробовал модифицировать плагин:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.0.2</version>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <executable>C:\Program Files (x86)\Java\jdk1.6.0_18\bin</executable>
    </configuration>
</plugin>

Тем не менее, я получаю ту же ошибку.

Я использую плагин Eclipse Maven. Как я могу перейти с JRE на JDK в Eclipse?


Вы дважды проверяли с помощью команды командной строки, setчтобы убедиться, что JAVA_HOME установлен на то, что вы думаете?
Powerlord

Я использую java каждый день .. все работает нормально вот она: java -version .6.0_18-ea" time Environment (build 1.6.0_18-ea-b04) ) Client VM (build 16.0-b11, mixed mode, sharing)
Gandalf StormCrow

1
Установите <fork> true </fork> при установке исполняемого файла.
Робин

На самом деле это не говорит нам, какая установка Java java -versionвыполняется; это может быть установка JRE или JDK. javac -versionбыло бы немного полезнее. Однако даже тогда, если PATH правильный, а JAVA_HOME неправильный, они все равно будут отображаться так, как вы ожидаете.
Powerlord

1
Кроме того, исполняемый файл должен быть ... \ bin \ javac, вы должны указать фактический исполняемый файл, а не только путь.
Робин

Ответы:


141

Вы можете попробовать обновить JDK Eclipse, как показано ниже:

Добавьте и установите JRE в меню ОкноНастройки ...JavaУстановленные JRE :

JRE type: Standard VM JRE
Name: jdk1.6.0_18
JRE home directory: C:\Program Files (x86)\Java\jdk1.6.0_18

Если это не так, возможно, скобки и пробелы в пути JAVA_HOME вызывают проблемы. Попробуйте скопировать JDK в другое место и обновить JAVA_HOME.


1
Это действительно первая часть вашего вопроса, JAVA_HOME, все в порядке,
Гэндальф StormCrow

47
Для меня потребовался дополнительный шаг: перейти к свойствам указанного проекта-> путь сборки java-> библиотеки-> выберите «Системная библиотека JRE», нажмите «Изменить» и выберите «Рабочая область по умолчанию JRE»
maayank

1
мне было мало, пришлось редактировать eclipse.ini. Я считаю, что это ошибка.
ruhsuzbaykus

У меня это сработало только тогда, когда я проверил соответствующий jdk в среде выполнения -> Совместимые JRE.
Ведран

9
Кроме того, если вы запускаете Maven из конфигурации запуска eclipse, которую вы создали до этих изменений конфигурации, не забудьте перейти на вкладку «Окно конфигурации запуска / JRE» и выбрать правильную JRE. В противном случае вы можете использовать старую неправильную JRE даже после обновления настроек вашего затмения и проекта до нового.
Diana

20

Для файла eclipse.ini требуется vmаргумент, указывающий на ваше местоположение JDK.

Отредактируйте eclipse.iniфайл, чтобы он указывал на ваш дом JDK, примерно так:

-vm
C:\Program Files\Java\jdk1.6.0_06

Это гарантирует, что Eclipse будет работать с JDK, а не с JRE по умолчанию на вашем компьютере.


5
Это устранило мою проблему. Из исследований в Интернете, похоже, что Maven использует JAVA_HOME, но Maven Plugin ничего не знает о JAVA_HOME и вместо этого по умолчанию использует виртуальную машину, используемую для запуска Eclipse.
jnosek

13

Вы пытаетесь:

Зайдите Preferences/Java/Installed JREsи добавьте один для местоположения "C:\Program Files\Java\jdk1.6.0_27\jreили что-то в этом роде.

Удалите один для C:\Program Files\Java\jre6

Как видите, путь C:\Program Files\Java\jre6\..\lib\tools.jarимеет смысл только в том случае, если первая часть (до / ..) заменена на C:\Program Files\Java\jdk1.6.0_27\jre.


10

Установка для fork значения true решила проблему для меня.

<configuration>
    <fork>true</fork>
    <source>1.6</source>
    <target>1.6</target>
</configuration>

9

У меня была точно такая же проблема! Я искал и искал несколько дней, потому что вся болтовня о том, что "поместите -vm c: \ program files \ java \ jdkxxxxx \ bin" в ini ar в качестве аргумента для ярлыка, совершенно не помогли !

(Неужели я расстроен? Поверьте, это преуменьшение! Я просто в ярости, потому что потерял неделю, пытаясь сделать Maven надежным!)

У меня было очень непредсказуемое поведение. Иногда он компилируется, а иногда нет. Если бы я сделалmaven clean , он не смог бы найти компилятор и потерпел неудачу. Если я затем изменил что-то в пути сборки, он внезапно снова заработал !!

Пока я не зашел в меню ОкноНастройкиJavaУстановленные JRE . Я добавил новую JRE, используя расположение JDK, а затем удалил JRE. Внезапно Maven заработал стабильно!

Может быть, стоит писать буквы размером 30 или около того в руководстве по Apache?

При всем уважении, это просто возмутительно для сообщества Java! Я не могу представить, сколько дней потеряли все эти люди, пытаясь решить свои проблемы такого рода! Я не могу представить, что это будет финальная версия. Я лично даже не решился бы выпускать такую ​​штуку под названием beta software ...

С уважением в любом случае .... После недели вмешательства я наконец могу начать развиваться. Надеюсь, мой босс не узнает об этом. Мне потребовалось много усилий, чтобы убедить его не переходить на .NET, и я уже сожалею об этом.


1
нижняя строка, используйте его с консоли, а не из eclipse, у вас не будет такого рода проблем, это то, что я понял после нескольких месяцев использования, теперь довольно комфортно с maven
Гэндальф StormCrow

Это больше похоже на затмение ... Проблема с m2e .. У меня такая же проблема, и другие IDE (netbeans и IDEA) работают отлично.
Джошуа

3

У меня такая же проблема при использовании Run as -> Maven install в Eclipse. JAVA_HOME и eclipse.ini были в порядке и указывали на мой последний JDK. Но m2clipse использовал JRE. Использование mvn install вне Eclipse работало нормально!

В моем случае я решил проблему следующим образом:

  1. Перейдите в Eclipse: меню WindowPreferencesJava Установленные JRE».
  2. Было две неактивных записи для JRE и JDK. Активным был последний установленный JDK. Удалите все записи, кроме той, которую должен использовать Maven.

Я думаю, что Maven не учитывает, какой из них активен ...



3

Я только что установил Maven 3.0.4, установить M2_HOME, M2и JAVA_HOMEсоответственно. Затем я выполнил следующие команды:

mvn archetype:generate....

mvn compile

Я получил сообщения не удался , такие как: maven unable to locate javac compiler.

На моем компьютере по умолчанию JRE установлена ​​в C: \ program files \ java \ jre.1.6 . И у меня есть другой C: \ java \ jdk1.6 и JAVA_HOMEустановлен на этот C: \ java \ jdk1.6 .

Я не заметил ничего плохого в моих настройках. После поиска я решил изучить mvn.bat, я повторил %JAVA_HOME%каждый шаг, и он отображался правильно как C:\java\jdk1.6, но когда я запускаю команду mvn --version, он отображает домашнюю страницу Java: C: \ program files \ java \ jre1.1.6 .

Наконец, я обнаружил, что мне просто нужно установить, -Djava.home=c:\java\jdk1.6как в приведенной ниже команде, и теперь все работает нормально:

%MAVEN_JAVA_EXE% %MAVEN_OPTS% -classpath %CLASSWORLDS_JAR% "-Dclassworlds.conf=%M2_HOME%\bin\m2.conf" "-Djava.home=%JAVA_HOME%" "-Dmaven.home=%M2_HOME%" %CLASSWORLDS_LAUNCHER% %MAVEN_CMD_LINE_ARGS%

Примечание: это для mvnкомандной строки, а не для Eclipse.


Эй, тебе не нужно идти и всегда объяснять каждый шаг, который ты сделал. См. Как ответить по существу .
mtk

Это похоже на взлом (но эй ... если это сработает для вас!), Но интересно, что командная строка maven выбирает неправильный java-каталог - это наша текущая проблема.
Plasma147,

2

Я решил проблему, изменив местоположение установленной JRE на каталог, присутствующий в самом JDK. Установка правильного значения JAVA_HOMEпеременной окружения не решила проблему.

В моем случае есть два каталога

  • C:\Program Files\Java\jdk1.7.0_03 --> For JDK

  • C:\Program Files\Java\jre7 --> For JRE

Первоначально я установил C:\Program Files\Java\jre7JRE в Eclipse как установленную и получал ту же ошибку в случае Maven (Ant работал нормально).

Изменение установленной JRE на C:\Program Files\Java\jdk1.7.0_03\jre7установленную JRE в Eclipse решает проблему.


2

Не забывайте, что если вы запускаете свой проект из определенной конфигурации Eclipse, вам следует изменить среду выполнения Java в разделе «Конфигурации запуска» -> «Конфигурация вашего maven» -> «Вкладка JRE» после добавления нужного JDK в ваши предпочтения Eclipse.


2

Похоже, Maven использует JRE, а не JDK. Возможно, вы установили Maven перед установкой JDK?

Проверьте файлы настроек . Всего их три: система, пользователь и проект. Скорее всего, это конфигурация установки ($ M2_HOME / conf / settings.xml) или, возможно, конфигурация для каждого пользователя ($ {user.dir} /. M2 / settings.xml).


2

Только настройка Eclipse

Проделайте следующие шаги:

  1. Щелкните правой кнопкой мыши Свойства проекта Eclipse.

  2. Путь сборки Java → Библиотеки

  3. Выберите Системную библиотеку JRE → Нажмите Editкнопку

  4. Нажмите кнопку "Установленные JRE ..."

  5. Отредактируйте JRE как: Установите JRE Home = JAVA_HOME или JAVA_HOME \ jre

Скриншот:

Введите описание изображения здесь


У меня это сработало, спасибо. Я изменил домашний каталог JRE на папку JDK.
LadyBernkastel

1

Щелкните правой кнопкой мыши меню ProjectPropertiesJava Build Path. .

Выберите системный путь JRE → Изменить . Выберите JRE рабочего пространства по умолчанию и укажите его на JDK> 1.4.


1

Используйте меню ОкноНастройкиJavaУстановленные JREСреды выполнения -> установите флажок справа.


1

Решение простое. Иногда Eclipse WindowsPreferencesJavaInstalled JRE указывает наC:\Program files\Java\jre .

Когда я его поменял, C:\Program files\Java\JDK 6.0\jreон работает на 100%.


1

Как упоминалось рядом других, Eclipse WindowPreferences ...JavaInstalled JRE должны указывать на установленный вами JDK , а не на JRE. Только тогда он сможет найти ../libпапку, указанную в сообщении об ошибке.

Даже при этом проблема может повториться. Мой выход в Eclipse v4.2 (Juno) - это сделать меню MavenОбновить проект ... после чего проблема исчезнет.

Я подозреваю, что причина в том, что некоторые из файлов, сгенерированных Eclipse (.classpath, .project, .preferences), находятся в Subversion для проекта, в котором у меня возникли эти проблемы. Таким образом, обновление SVN представляет проблему, а обновление конфигурации от Maven в Eclipse снова решает ее.

Реальное решение: исключить созданные Eclipse файлы .files из системы управления версиями и позволить плагину Maven Eclipse обрабатывать конфигурацию проекта. (Дополнительные указатели / предложения приветствуются) .


1

В моем случае в меню Eclipse RunDebug Configurations .

На вкладке JRE выбор JDK вместо JRE решил проблему.


1

У меня была такая же проблема с Amazon Linux. Оказывается, мне пришлось установить версию JDK для разработчиков:

sudo yum -y install java-1.7.0-openjdk-devel

1

Перейдите в меню Eclipse ОкноНастройки ...JavaУстановленные JRE должны указывать на установленный вами JDK, а не на JRE.


Но это также есть в многочисленных предыдущих ответах.
Питер Мортенсен,

0

Вы также можете убедиться, что в Eclipse есть все обновленные изменения. Для этого щелкните свой проект правой кнопкой мыши и выберите пункт меню «Обновить».


0

Во многих других ответах вам предлагается указать в своем Eclipse JDK вместо JRE.

Вот еще один ответ с более конкретными / ясными [чем я видел в любом ответе здесь] пошаговыми инструкциями о том, как это сделать: Как установить JDK?

Вот почему я решил эту же проблему.


0

Убедитесь, что "-vm" в вашем eclipse.ini находится на двух строках sperate, то есть:

-vm
C:\Program Files\Java\jdk1.6.0_06

0

Я бы предположил, что расположение компилятора определяется в POM для плагина компилятора, который должен находиться в отображаемом местоположении JRE, а не в местоположении JDK, на которое указывает JAVA_HOME.


@Robin Где именно это искать? помпон выглядит нормально<groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.0.2</version> <configuration> <source>1.6</source> <target>1.6</target>
Gandalf StormCrow

Если <executable> не определен, то проблема не в этом, если только рассматриваемый вами pom не наследуется от родительского pom, для которого он определен.
Робин

При определении исполняемого файла вы также должны установить для <fork> значение true.
Робин,

0

Вам нужно указать JAVA_HOMEв mvn.ini(он находится в папке Maven /bin), и ваша проблема исчезнет.


0

Если вы установили JAVA_HOME, а проблема не исчезла, попробуйте следующее.

(У меня была такая же проблема на новом установленном ПК.)

Предполагая, что вы используете Eclipse.

  • Откройте окноНастройкиJavaУстановленные jre . Удалите все, что у вас есть, добавьте желаемое, которое хотите использовать (JDK, без JRE!)
  • В том же окне откройте maven - installation, добавьте установку Maven, которую вы скачали и где-то распаковали. ( Не используйте встроенную установку Maven. В ней есть известные ошибки.)

Вот и все. Ваш проект не столкнется с такими проблемами.


0

У меня была такая же ошибка из-за JUnit версии . У меня было три 3.8.1, а я сменил на 4.8.1.

Итак, решение:

Вам нужно перейти к POM и убедиться, что ваша зависимость выглядит так

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.8.1</version>
  <scope>test</scope>
</dependency>

0

Я изменил конфигурацию maven-compiler-plugin, чтобы добавить executableи forkсо значением true.

<configuration>
    <fork>true</fork>
    <source>1.6</source>
    <target>1.6</target>
    <executable>C:\Program Files\Java\jdk1.6.0_18\bin\javac</executable>
</configuration>

У меня это сработало.


0

Делай Echo %JAVA_HOME%и потом mvn --version.

Путь JRE должен быть таким же ... затем перейдите в меню WindowPreferencesJavaУстановленное местоположение JRE должно быть таким же, как Java_Homeпоказано.


0

Перейдите в диалоговое окно " Свойства" и щелкните проект правой кнопкой мыши.

В связанных ресурсах добавьте новый путь с именем JAVA_HOME и укажите свое местоположение JDK, например «C: \ Program Files \ Java \ jdk1.8.0_73».

Вот и все!!


Я не думаю, что вам следует добавлять какую-либо переменную ... просто измените конфигурацию JDK в разделе Run seetings на рабочую область JDK
Phani

0

Решение этой проблемы очень простое ...

Если у вас нет файла сборки Ant, сгенерируйте его. В Eclipse вы можете легко создать файл Ant .

См. Ссылку для создания файла сборки Ant [ http://www.codejava.net/ides/eclipse/how-to-create-ant-build-file-for-existing-java-project-in-eclipse] .

Теперь выполните указанные шаги:

1) Добавьте свой Ant файл сборки в Ant зрения , которая находится в окне просмотра.

2) щелкните правой кнопкой мыши файл сборки Ant и выберите « Запуск от имени». и второй вариант в этой « Ant».

3) Теперь откроется диалоговое окно с различными параметрами и вкладками.

4) Выберите вкладку JRE .

5) Вы увидите три переключателя, и в качестве опции для них будет выбран JRE или JDK.

6) Внимательно посмотрите, выбрана ли JRE для переключателей, затем измените ее на JDK .

7) Нажмите «Применить».

Это оно...!!!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.