Подтвердить что ты не робот

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

У меня есть 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)

enter image description here

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

Изменить Установленная папка: enter image description here

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

4b9b3361

Ответ 1

Проблема возникает, скорее всего, потому, что у вас есть 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.

Ответ 2

Хорошо, как вы сказали, что у вас нет 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. Вам нужно будет перезапустить команду строка для показа изменений.

Ответ 3

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

whereis java.exe

     

whereis javac.exe

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

Да, это правда, что для того, чтобы иметь дело с несовпадающими версиями, нам нужно изменить переменную 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 текущего пользователя, чтобы сделать эти записи последними в очереди поиска.

Ответ 7

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

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

Ответ 8

Перейдите в Переменные среды на вашем компьютере с 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. работал на меня. :) Здесь я связал свой скриншот