场景

工作近4年了,自我感觉编码能力并没有质的提高,打算从新再梳理一下Java,用记事本写一个“Hello World”程序。在网上随意下载了一个JDK,按照网上经典的windows环境变量配置方法配置后,在控制台执行 javac 命令出现不是内部或外部命令异常。

一、问题

在控制台执行 javac 出现:

javadoc 不是内部命令 javac.exe不是内部命令_javadoc 不是内部命令

而 执行 java 命令却可以正常显示:

javadoc 不是内部命令 javac.exe不是内部命令_JAVA_02

 

二、分析

出现该问题的原因大致有两种:

1、CLASSPATH、JAVA_HOME、Path 环境变量配置有问题。
2、安装包有问题。

javadoc 不是内部命令 javac.exe不是内部命令_JAVA_03

使用的安装包实际上是JRE,而非JDK,鄙人就是一开始就整了一个JRE(如上图所示)以为是JDK,正确配置环境变量后出现题干中的问题。JRE安装后的lib目录下是没有dt.jar与tools.jar等JDK核心类库的,JDK安装才有。因此,即使安装解决方案中的正确配置JDK环境变量步骤正确配置后也是无法在控制台执行javac的。“dt.jar 是关于运行环境的类库,主要是swing的包 ;tools.jar 是关于一些工具的类库 ; rt.jar包含了jdk的基础类库,也就是你在java doc里面看到的所有的类的class文件”。关于dt.jar与tools.jar的作用详见参考文献。这里有必要使用一张图来完美诠释一下JVM、JRE与JDK的区别与联系。

javadoc 不是内部命令 javac.exe不是内部命令_JAVA_04

总的来说:JDK包含JRE,除此之外还包含一些JAVA程序开发与调试工具,这其中就包含编译工具 javac 。JRE包含JVM 还有一些基础类库,不包含编译工具 javac 。

 

三、解决方案

1、正确配置JDK环境变量。

这里随便在网上找了一遍文章,摘抄部分内容如下(详见参考文献):

一共需要设置3个环境变量:Path,Classpath和Java_Home(大小写无所谓)。 Windows系统中设置环境变量如下图:

右击“我的电脑”,选择“属性”。

点击“高级”选项卡,选择“环境变量”。

在“系统环境变量”中设置上面提到的3个环境变量,如果变量已经存在就选择“编辑”,否则选“新建”。

JAVA_HOME:指明JDK安装路径,就是安装时所选择的路径(假设安装在D:\jdk1.4),此路径下包括lib,bin,jre等文件夹(此变量最好设置,因为以后运行tomcat,Eclipse等都需要依靠此变量)。

Path:使得系统可以在任何路径下识别java命令,设为:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin 。

CLASSPATH:java加载类(class or lib)路径,只有类在classpath中,java命令才能识别,设为:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar (要加.表示当前路径)

特别注意:

◆环境变量值的结尾没有任何符号,不同值之间用;隔开(unix中用:)。

◆CLASSPATH变量值中的 .  表示当前目录。

2、使用JDK安装包而非JRE。推荐JDK直接去oracle官方网站下载,具体路径详见‘参考文献’。

 

总结

1. 正确安装JDK而非JRE,并配置好环境变量就能避免在控制台执行 javac 与 java 出现异常。

2. win 10 下 JAVA与SCALA环境变量的配置模板


javadoc 不是内部命令 javac.exe不是内部命令_jdk_05


具体值设置如下:


JAVA_HOME:    E:\java\program

CLASSPATH :   .;%SCALA_HOME%\lib;%SCALA_HOME%\lib\dt.jar;%SCALA_HOME%\lib\tools.jar;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar

Path:             :   系统其他变量 ;%SCALA_HOME%\bin;%SCALA_HOME%\jre\bin;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

 

参考文献

1、JDK下载链接:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

2、JDK与JRE区别于联系官方说明:http://docs.oracle.com/javase/8/docs/

3、JDK环境变量配置说明:http://developer.51cto.com/art/200907/134780.htm