Java环境变量,真的还有必要配吗?
作为年龄上堪称老鸟而技术上却是菜鸟的老菜鸟,为了祖国的编程事业,不惜拿出一个月工资,淘了一台配置稍高的二手笔记本,打算与老笔记本中的撸啊撸片彻底说再见,誓要在新机种开启一番撸啊撸的新事业。当然,撸代码离不开基本的环境搭建,每次新机上手都要百度一堆杂乱的似是而非的环境搭建教程,才勉强把开发环境搭建起来,时间耗费不少,但终是拾人牙慧,生搬硬套,从未能理解深层原理,将其内化吸收形成自己的技术积累;而环境搭建虽然基础,但编程界多少前辈大牛都是从此开始的,千万行代码的撸出也都依赖于此,所以,花时间总结一下,思考一番,确有必要。今天先来讲讲最最基本的环境变量,博主度娘无数,收获不小,现分两个方面来探究环境变量的问题:一是为什么要配置,二是如何配置。
配置环境变量:Why?
为了回答为什么的问题,还是先将JDK下载好,然后布衣博主先一步步的试错完毕,然后再跟大家分享正确的姿势。安装JDK首先肯定是去Oracle官网下载适合自己的开发版本啦,或许是沉浸在JDK1.7的开发环境中太久了,不看官网不知道,一看尼玛JDK1.9都发布了,可怜布衣博主连JDK1.8长啥样都还没见过呢。伤心三秒,果断下载JDK1.8的版本来尝尝。下面是下载主页的重点内容,相信大家都知道具体操作:
安装JDK也很简单,先是JDK,然后是JRE,如果要自定义路径,注意两者不要安装在同一个包下面。然后,作为Java开发者,就会按基本套路开始配置起环境变量。如果仅仅是作为一个代码搬运工,百度有一堆环境变量的配置方式,傻瓜也会配置,但要想成为一个高阶一些的码农,在进行一个操作之前,总该知道你干这件事的缘由——为什么要配置环境变量,如果不配置又会怎样?平时看起来只是开发入门的基础操作,深究起来其实并不简单。有人会呵呵一笑很倾城——不配环境变量,我们怎么开发?欸,这样的问题,我只能说,编程这玩意儿,很多时候不动脑子是可以的,但是不动手却不行。布衣博主以前的固有思想也是觉得,配置环境变量是Java开发的固定姿势,可是今天为了深究环境变量这个问题,下载JDK1.8来折腾一番后发现,仅仅是安装好JDK和JRE,根本用不着配置什么环境变量就可以开发和跑项目了,这是怎么回事?到环境变量配置页查看,会发现在path的值中有个C:\ProgramData\Oracle\Java\javapath路径值生成,如以下图中展示(注:图例一为Win10系统的环境变量配置界面,和Win7有很大不同)——
而在映射的路径文件夹中已经存在了可执行的java.exe,这似乎是说明新版JDK(1.8)在安装的时候就已经自动为我们添加好了环境配置。当博主删除该path映射的路径值C:\ProgramData\Oracle\Java\javapath的时候,集成开发环境中的eclipse就无法正常打开了,但是IDEA依然能正常使用,添加之后eclipse恢复正常。接着将JDK1.8卸载,保留运行环境JRE,这个时候eclipse依然可以正常使用,因为Eclipse比较例外的是它自己内嵌了Java编译器,其作用等同于JDK中的javac,所以eclipse其实只需要依赖JRE就可以做开发并编译运行Java文件的,有了JDK只是为了方便查询源码,而这个时候IDEA少了JDK的支持就无法正常开发使用了。接着卸载JRE,这个时候开发工具肯定是没法使用了,关键是在环境变量的Path值C:\ProgramData\Oracle\Java\javapath也消失了,对应路径下的文件也被删除了,这就说明在安装JRE的时候,是会为我们自动配置好环境变量的。环境变量都没配置就成功的布衣博主实在不甘心,卸载了JDK1.8之后又单独安装了JDK1.7继续尝试,安装完成后Path值并没有自动添加,博主也没有主动的去配置任何环境变量,但是打开Eclipse或者Idea等IDE,依然可以正常开发跑项目。尝试至此,似乎证明了长久以来大家配置环境变量只是思维和行为固化后的自以为是,纯粹是多此一举,对日常开发调试并没有卵用。难道,这么多程序员都在信奉了一个错误的认知而且丝毫不觉得有异?
要搞解开这个疑惑,还是得搞清楚环境变量到底是干什么的,为什么要配置它。所谓环境变量,其实就是操作系统中用来指定操作系统运行环境的一些参数,比如临时文件夹位置和系统文件夹位置等。当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到环境变量的Path中指定的路径值去找。也就是说当执行可执行文件找不到位置的时候,就会去Path中配置的路径去找。因此可以设想如果直接在可执行文件所在文件夹取执行,那不就是找得到吗?为了证明,博主先打开cmd执行编译命令javac,返回不是内部或外部命令,当我们切换到JDK的bin目录C:\Program Files\Java\jdk1.8.0_162\bin路径去执行javac命令的时候,就能够成功执行,好像配置了环境变量一样——
既然可以执行javac,那么我们就在该目录下测试编译一个Java文件。先用记事本编写测试代码 public class Test { public static void main(String[] args) { System.out.println("博客园 陈本布衣"); } } ,文件名必须和类名保持一致Test.java,然后我们执行编译命令并运行文件——
可是正常情况下我的Java文件是不可能放在bin目录下的,所以我们接着配置好环境变量,使我们能够在任意目录编译Java文件——
配置环境变量的目的似乎达到了,仅仅是为了不用切换到JDK的bin目录就能执行编译命令的方便,可是,现在都是用集成开发环境如idea或eclipse等开发并编译Java程序,如果不是使用命令行javac的方式来编译Java程序,那么,广大的程序员们,你在搭建开发环境的时候,配置环境变量到底是因为什么?
配置环境变量:How?
欸,本来前文阐述了环境变量的原理后,这里计划该写如何配置了,但是布衣博主在不断尝试之后发现环境变量在Java的开发环境中根本不是必须的配置,所以,这里的How就只能戛然而止了,实在不想多叨叨如何配置那不必要的玩意儿了。当然,或许我前文的尝试和总结很有问题,因为配置了多年环境变量的博主自己一直都还在怀疑上文的尝试是否正确,也诚心希望各路大神指出阐述中的问题,共同来探讨环境变量配置的必要性和可用之处,以免误导他人;
原创博文,转载请注明出处和原文链接,谢谢!
作者:陈本布衣
Java环境变量,真的还有必要配吗?的更多相关文章
- Java环境变量配置教程
Windows 10 Java环境变量配置教程 目前Windows 10系统已经很成熟,大多数人开发都在Windows 10系统下进行开发,于是乎我做一下Java环境变量在Windows 10配下的 ...
- java环境变量设置--编写一年java,竟不会配变量了
java环境变量设置 1.打开我的电脑--属性--高级--环境变量 2.新建系统变量JAVA_HOME 和CLASSPATH 变量名:JAVA_HOME 变量值:C:\Program Files\Ja ...
- 为什么要配置java环境变量
Java环境变量,真的还有必要配吗? 作为年龄上堪称老鸟而技术上却是菜鸟的老菜鸟,为了祖国的编程事业,不惜拿出一个月工资,淘了一台配置稍高的二手笔记本,打算与老笔记本中的撸啊撸片彻底说再见,誓要在新机 ...
- linux配置java环境变量jdk jre(详细)【转】
linux配置java环境变量(详细) 本文完全引用自: http://www.cnblogs.com/samcn/archive/2011/03/16/1986248.html 一. 解压安装jdk ...
- 配置java环境变量(详细)
内容:java安装.配置java环境变量.简单编译运行(详细) 为什么配置系统环境变量好?个人理解在结尾 ############################################### ...
- win10中java环境变量配置
首先,应该安装jdk,jdk的安装一般是jdk8,一般情况下去官网下载,此处有jdk8的网盘链接: -- 在安装jdk时候,可以看下这篇jdk和jre区别的博客--,有助于理解两者的区别和联系. 接触 ...
- java环境变量配置
1.打开我的电脑--属性--高级--环境变量 2.新建系统变量JAVA_HOME 和CLASSPATH 变量名:JAVA_HOME 变量值:C:\Program Files\Java\jdk1.7.0 ...
- Ubuntu中配置Java环境变量时,出现command not found问题解决记录
百度出Ubuntu中配置Java环境变量时,在利用sudo gedit /etc/profile 对profile编辑后, 在terminal中输入 sudo source /etc/profile, ...
- JAVA基础学习——1.3 关于JAVA环境变量设定 Path,Java_Home,ClassPath
在安装完JDK以后,要设定JAVA环境变量. 刚接触的时候,我很困惑,这特么什么玩意啊,然后知其然不知其所以然的 按照说明做完了却不知道为什么这么做,这里简单做一些总结说明. 首先,什么是环境变量 环 ...
- Java环境变量的简记
1,安装版的jre或jdk.安装后如果不做开发用,则只是做Java运行时环境,则不需要手动配置任何Java环境变量. 2,绿色解压版(拷贝版)jdk或jre.运行和开发都需要配置环境变量. 运行Jav ...
随机推荐
- sqlsever 科学计数法 转标准值
一.解决方案 2e-005 转成 0.00002 update 表名 set 列名=cast(列名 as float) as decimal(19,5)) where 列名 like '%e%' 如 ...
- html2canvas在微信中无法使用
html2canvas: https://github.com/niklasvh/html2canvas 本来想在微信网页中使用html2canvas生成图片,结果死活不行 测试发现在Chrome,手 ...
- 登录功能(MD5加密)
登录这个功能,是不管哪个项目都会用到的,登录做的好坏,安全性的保障将直接影响到整个系统的成败,尤其是一些安全性要求比较严格的项目 1.首先需要对密码进行加密,这里用到的是md5加密,需要在login. ...
- Docker 入门之创建service(一)
在一个分布式应用中,我们把应用的不同层叫做"Services".比如,一个视频共享应用,它包含存储数据到数据库的服务,用户上载后后台进行的视频解码服务,前端服务等等. 然而,一个服 ...
- Egret学习笔记 (Egret打飞机-7.实现敌机工厂)
在游戏过程之,敌机是源源不断的冲屏幕上方往下飞,如果我们每一架敌机都直接new的话,在飞机很多的情况下,也许有性能问题. 就像前面子弹对象池一样,我们也要实现一个飞机对象池,也就是标题说的敌机工厂(之 ...
- nginx启动停止
nginx -s reload :修改配置后重新加载生效 nginx -s reopen :重新打开日志文件 nginx -t -c /path/to/nginx.conf 测试nginx配置文件是否 ...
- CentOS6实现路由器功能
网络之间的通信主要是依靠路由器,当然生成环境中是拥有路由器的,但是系统中的路由配置也是需要了解一下地,今天讲解一下在CentOS6环境下搭建路由器,此乃入门级的简单实验.拓扑如上图已经规划好,暂且使用 ...
- 编译、裁剪、安装、删除 Ubuntu内核和模块管理
一.下载最新内核文件 地址:http://www.kernel.org,一般下载Full Source版本. 下载完毕后,放到任意文件夹中,使用命令: tar jxvf linux-x.x.x.tar ...
- 第5章 PCIe总线的事务层
事务层是PCIe总线层次结构的最高层,该层次将接收PCIe设备核心层的数据请求,并将其转换为PCIe总线事务,PCIe总线使用的这些总线事务在TLP头中定义.PCIe总线继承了PCI/PCI-X总线的 ...
- 把mmapv1存储引擎存储的mongodb3.0数据库数据复制到WiredTiger存储引擎的mongodb3.2中
mongodb3.0在mmapv1的存储引擎基础上添加了一个新的存储引擎WiredTiger.但是3.0的默认存储引擎依旧是mmapv1,因此我们项目之前也就用的默认方式. 但是mongodb更新实在 ...