java -version и javac -version, показывающие разные версии

16

У меня есть java 7 и java 8, установленные на моей системе Windows под C:\Program Files\Java

В пути среды я указал путь java 7 следующим образом.

%JAVA_HOME%/bin где JAVA_HOME = C:\Program Files\Java\jdk1.7.0_17

Но когда я набираю javac -version, он показывает javac 1.7.0_17, что имеет смысл

но когда я делаю java -version, он показывает

java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)

Изображение 36249

Любая идея, что может быть проблемой здесь?

Изменить Установленная папка: Изображение 36250

И еще одна вещь echo %PATH% имеет только одно вхождение JDK, которое для java 7 и не имеет места для JRE, найденного в нем.

  • 3
    Вы уверены, что установили Java 8 JDK , а не только его JRE ?
  • 2
    Посмотрите, содержит ли echo %PATH% папку JRE Java 8 перед папкой JDK Java 7
Показать ещё 7 комментариев
Теги:

8 ответов

17

Проблема возникает, скорее всего, потому, что у вас есть JRE в вашем path, перед вашим JDK. Обычно это происходит, когда мы добавляем JDK в path и не удаляем ранее добавленные JRE. Таким образом, когда вы делаете java, он указывает на JRE, а когда вы делаете javac, он указывает на другую версию /JDK (поскольку jre не имеет javac в ней)

Изменить: - Поскольку вы отредактировали свой вопрос и разместили без каких-либо JRE в своем пути, вы можете скопировать ваш %JAVA_HOME% и вставить его сначала в свою переменную пути (убедитесь, что он до пути system32), я столкнулся с этой проблемой до (при установке android sdk), и это разрешило это.

Также найдено возможное объяснение этого из здесь: -

JRE also puts a java.exe to c:\Windows\System32, that how first command is resolved. Second command is resolved by the C:\Program Files\Java\jdk1.7.0_02\bin entry in your PATH variable. If (and when) you are developing from the command prompt, you have to adjust the PATH variable so that C:\Program Files\Java\jdk1.7.0_02\bin is before c:\Windows\System32.

  • 0
    echo %PATH% показывает только один случай JDK, который относится к Java 7, и в нем не найдено ни одного случая JRE.
  • 0
    Да, видел ваши правки и обновил мой ответ
Показать ещё 4 комментария
5

Хорошо, как вы сказали, что у вас нет JRE на вашем пути, я предполагаю, что where java (если у вас Windows 7) даст вам C:\Windows\System32\java.exe.

Изменение java работает

Попробуйте использовать диалог настроек Java с панели управления, чтобы изменить версию Java System Version, которая в настоящее время активна. Это должно изменить версию java -version. Если это не сработает, вам, вероятно, потребуется переустановить версию Java, для которой вы хотите запустить команду java, указать путь явно, написать свою собственную оболочку (которая работает, если вы находитесь в том же каталоге, что и обертка) или поместите путь JRE до C:\Windows\System32\ на ваш путь (не знаю, действительно ли последний вариант действительно хорош).

Обертка может выглядеть так:

@"C:\Program Files\Java\jre7\bin\java.exe" %*

и вы можете назвать его java.bat (где он будет работать, если вы находитесь в том же каталоге или поместите его в PATH до C:\Windows\System32\java.exe или вы можете назвать его java7.bat и поместить его в любом месте вашего пути чтобы иметь возможность запуска Java JRE JRE, если вы этого хотите.

Обертка также является хорошим вариантом, если вы хотите изменить JAVA_HOME при запуске.

Изменение javac работает

Если вы хотите запустить другой javac хит Windows + Pause и откройте системный диалог, чтобы изменить PATH, поэтому он содержит путь к вашему JDK 8 вместо вашего JDK 7. Вам нужно будет перезапустить команду строка для показа изменений.

  • 0
    Я только что обнаружил, что c: \ Windows \ System32 \ java.exe с измененной датой совпадает с датой установки java 8, поэтому я предполагаю, что java.exe в c: \ Windows \ System32 имеет java8, как решить эту проблему без закалки путь?
  • 0
    @M.SharmaM.Sharma Второй абзац моего ответа. Думаю, переустановка JRE 7 может быть лучшим вариантом. Для меня теперь есть способ изменить Системный JRe через панель настроек Java, и я думаю, что это когда-то было возможно.
Показать ещё 3 комментария
1

Чтобы решить такую ​​проблему, я всегда верю в команду whereis, Чтобы сделать то же самое в windows, загрузите whereis.exe, затем установите путь и выполните команду

whereis java.exe

     

whereis javac.exe

Вы легко найдете точный путь, из которого вызывается java в среде, а также о javac.

  • 0
    По крайней мере, Windows 7 уже дает вам путь, если вы запускаете, where java ...
  • 0
    Да, но в другой версии ОС его нет, поэтому разработчики могут легко его использовать.
Показать ещё 1 комментарий
0

Перейдите в Переменные среды на вашем компьютере с Windows. В пользовательских переменных: Убедитесь, что для вашей пользовательской переменной "JAVA_HOME" установлено значение "C:\Program Files\Java\jdk-xxxx\bin", где "jdk-xxx" - это версия вашего jdk.

В системной переменной: - Добавьте то же значение "C:\Program Files\Java\jdk-xxxx\bin" в переменную "Path". не забудьте переместить добавленную стоимость поверх всех значений.

Теперь попробуйте запустить Java -version и Javac -version. работал на меня. :) Здесь я связал свой скриншот

  • 0
    Меня устраивает.
0

В моем случае (перемещение jdk8 → jdk9 → jdk11) у меня был мусор, оставленный jdk8 в PATH (до JAVA_HOME: "C:\path\java11")

так что я просто удалить C:\ProgramData\Oracle\Java\javapath от системных переменных

0

Да, это правда, что для того, чтобы иметь дело с несовпадающими версиями, нам нужно изменить переменную PATH, а команда where (по крайней мере, в Windows) очень удобна для определения, какая программа выбирается первой. Однако есть и поворот: когда вы смотрите на содержимое yout PATH var после запуска, например,

echo %path% > path.txt

Вы должны знать о том факте, что PATH фактически состоит из ДВУХ разделов: один из них - системный PATH, а другой - текущий пользовательский PATH, и это системный путь, который оценивается первым, но печатается последним. Поэтому простое размещение пути к вашему, скажем, новому JDK перед всем будет бесполезным, если в System PATH есть место с более старой версией.

Эта конкретная проблема особенно распространена, когда у вас есть записи, такие как

C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\ProgramData\Oracle\Java\javapath

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

0

Я думаю, когда вы пишете javac, он получает значение от jre7, которое в настоящее время используется вами для целей разработки, и когда вы пишете java version, он получает значение version из jre8, который в настоящее время используется установленными приложениями в вашей системе, потому что ваш JRE системы упоминается перед jre7, который вы используете для разработки

  • 2
    Это комментарий, а не ответ.
  • 1
    Вопрос @RuchiraGayanRanaweera OP не в некоторой ошибке в коде, а в объяснении некоторых фактов.
0

После входа в программу или выполнения системного вызова система сначала ищет в текущем каталоге, а затем в PATH, проверяя каждый каталог слева направо в исполняемом файле, соответствующем команде. Когда система находит исполняемый файл, запускает его (остановка поиска).

У вас есть предварительно установленная система JRE в переменной среды PATH до JRE, которая вам нужна.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню