java -version和javac -version显示不同的版本

时间:2014-08-01 06:19:58

标签: java

java 7

下我的Windows系统上安装了java 8C:\Program Files\Java {/ 1}}

在环境的路径中,我指定了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没有出现{/ 1}}。

10 个答案:

答案 0 :(得分:17)

问题的发生很可能是因为JRE之前path中有JDK。当我们在path中添加JDK并且不删除以前添加的JRE时,通常会发生这种情况。因此当你执行java时,它指向JRE,当你执行javac时,它指向另一个版本/ JDK(因为jre中没有javac)

编辑: - 由于您编辑了问题并且在路径中发布了没有任何JRE,您可以复制%JAVA_HOME%并将其首先粘贴到路径变量中(确保它在system32路径之前),我遇到过这个问题之前(安装android sdk时)这样解决了它。

还从here找到了对此的可能解释: -

JRE also puts a java.exe to c:\Windows\System32, that's 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.

答案 1 :(得分:5)

好的,正如你所说,你的路上没有JRE,我认为where java (if you have Windows 7)会给你C:\Windows\System32\java.exe

更改java正在运行的

尝试使用控制面板中的Java-Settings对话框更改当前处于活动状态的Java System Version。这应该会更改返回的java -version版本。如果这不起作用,您可能需要重新安装要运行java命令的Java版本,明确指定路径,编写自己的包装器(如果您与其位于同一目录中,则可以使用它包装器)或将C:\Windows\System32\之前的JRE路径放在路径上(不知道最后一个选项是否真的好)。

包装器看起来像这样:

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

并且您可以将其命名为java.bat(如果您位于同一目录中它可以使用,或者在PATH之前将其放在C:\Windows\System32\java.exe中,或者您可以将其命名为java7.bat如果你愿意的话,可以把它放在你路径上的任何地方,以便能够运行Java 7 JRE。

如果要在运行时更改JAVA_HOME,则包装器也是一个不错的选择。

更改javac正在运行的

如果要运行不同的javac匹配Windows + Pause并打开系统对话框以更改PATH,那么它包含JDK 8的路径而不是JDK 7。将需要重新启动命令行以显示更改。

答案 2 :(得分:3)

转到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。 为我工作。 :) Here i've linked my screenshot

答案 3 :(得分:1)

要解决这种环境问题我总是相信命令whereis, 要在Windows下载whereis.exe中执行相同操作,然后在路径中设置并执行命令

  
    

whereis java.exe

         

whereis javac.exe

  

您将很容易找到在环境中调用java的位置的确切路径以及javac。

答案 4 :(得分:0)

我想当你写javac时,它正在获取jre7的值,当前您正在使用该值进行开发,当您编写java version时,它正在获取系统上已安装的应用程序当前正在使用version的{​​{1}}的值,因为系统的jre8在您使用的JRE之前被提及发展

答案 5 :(得分:0)

是的,是真的,为了处理不匹配的版本,我们需要修改PATH变量和 where 命令(至少,在Windows中)在找出首先选择哪个程序方面非常方便。 但是,有一个转折: 例如,当您在运行后查看您的PATH var的内容时,

echo %path% > path.txt

您应该了解以下事实:PATH实际上由两个部分组成:一个是系统PATH ,另一个是当前用户PATH ,而它是系统路径,该系统首先评估,但最后打印。 因此,只要在 System PATH (系统路径)中的某个地方放置一个较旧版本的新JDK路径就无用了。

当您输入诸如

这样的条目时,此特定问题尤其常见。
C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\ProgramData\Oracle\Java\javapath

在您的系统路径中。只需将它们移到当前用户路径部分的末尾,即可将这些条目作为搜索队列中的最后一个条目。

答案 6 :(得分:0)

我的情况(移动jdk8-> jdk9-> jdk11)我遇到了垃圾  jdk8在PATH中留下的内容(在JAVA_HOME:“ C:\ path \ java11”之前)

所以我只是从系统变量中删除 public partial class WebForm1 : System.Web.UI.Page { public class Result { public string id { get; set; } public string main { get; set; } public string description { get; set; } public string icon { get; set; } } public class SearchList { public Position coord { get; set; } public int resultCount { get; set; } public Result[] weather { get; set; } } public class Position { public double lon { get; set; } public double lat { get; set; } } protected void Page_Load(object sender, EventArgs e) { } protected void Button1_Click(object sender, EventArgs e) { string searchTerm = TextBox1.Text; var webRequest = (HttpWebRequest)WebRequest.Create("http://api.openweathermap.org/data/2.5/weather?q="+Server.UrlEncode(searchTerm)+"&units=metric&APPID=*Removed*"); var webResponse = (HttpWebResponse)webRequest.GetResponse(); if (webResponse.StatusCode == HttpStatusCode.OK) { JavaScriptSerializer json = new JavaScriptSerializer(); StreamReader sr = new StreamReader(webResponse.GetResponseStream()); string resString = sr.ReadToEnd(); SearchList list = json.Deserialize<SearchList>(resString); GridView1.DataSource = list; GridView1.DataBind(); } else Label1.Text = "Invalid Response" ; } } }

答案 7 :(得分:0)

在Windows计算机的环境变量下检查您的JAVA_HOME变量。确保它指向所需的版本。 接下来检查添加到“ path”环境变量中的java jdk path。确保它是所需的版本,否则将其更改为JDK版本路径,然后将其移至path​​变量值列表的顶部。这应该将您所需的版本标记为首选,所有问题都将得到解决。我这样做了,一切都很好。

答案 8 :(得分:0)

请检查是否已替换“ C:\ ProgramData \ Oracle \ Java \ javapath;”在PATH变量中包含%JAVA_HOME%/ bin。这对我有用。

答案 9 :(得分:0)

面向 LINUX 用户

如果 java 和 javac 显示不同的版本,那么您可以轻松地将它们设置为正确或相同的版本

第一步

sudo update-alternatives --config java

输出:

    Selection    Path                                          Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-11-openjdk-amd64/bin/javac   1111      auto mode
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/javac   1111      manual mode
* 2            /usr/lib/jvm/java-8-openjdk-amd64/bin/javac    1081      manual mode

这将显示以下结果,start(*) 表示您的系统正在使用的javac 版本。您可以通过选择所需的版本来更改它。

步骤 2

sudo update-alternatives --config java

输出:

      Selection    Path                                            Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      auto mode
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      manual mode
* 2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode

现在您可以再次选择要为 java 运行的版本。

这样可以确保 java 和 javac 具有相同的版本。