作為年齡上堪稱老鳥而技術上卻是菜鳥的老菜鳥,為了祖國的編程事業,不惜拿出一個月工資,淘了一台配置稍高的二手筆記本,打算與老筆記本中的擼啊擼片徹底說再見,誓要在新機種開啟一番擼啊擼的新事業。當然,擼代碼離不開基本的環境搭建,每次新機上手都要百度一堆雜亂的似是而非的環境搭建教程,才勉強把開發環境搭建起來,時間耗費不少,但終是拾人牙慧,生搬硬套,從未能理解深層原理,將其內化吸收形成自己的技術積累;而環境搭建雖然基礎,但編程界多少前輩大牛都是從此開始的,千萬行代碼的擼出也都依賴於此,所以,花時間總結一下,思考一番,確有必要。今天先來講講最最基本的環境變量,博主度娘無數,收獲不小,現分兩個方面來探究環境變量的問題:一是為什么要配置,二是如何配置。
配置環境變量: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/MyEclipse就無法正常打開了,提示需要JDK或JRE,但是IDEA依然能正常使用,恢復之后Eclipse/MyEclipse能夠正常使用。接着將JDK1.8卸載,僅保留運行環境JRE,這個時候IDEA少了JDK的支持就無法正常開發使用了,而Eclipse/MyEclipse卻依然可以正常使用,這是因為Eclipse/MyEclipse比較例外的是它自己內嵌了Java編譯器,對javac沒有任何依賴關系,所以Eclipse/Myeclipse其實只需要依賴JRE就可以做開發並編譯運行Java文件的,有了JDK只是為了方便查詢源碼——其實我們不用安裝JDK同樣可以查看源碼,你只要我們的源碼包放在任意路徑,然后在設置中綁定源碼包就可以了,如下圖——
接着卸載JRE,這個時候開發工具肯定是沒法使用了,關鍵是在環境變量的Path值C:\ProgramData\Oracle\Java\javapath也消失了,對應路徑下的文件也被刪除了,這就說明在安裝JRE的時候,是會為我們自動配置好環境變量的。環境變量都沒配置就成功的布衣博主實在不甘心,卸載了JDK1.8之后又單獨安裝了JDK1.7繼續嘗試,安裝完成后Path值並沒有自動添加,博主也沒有主動的去配置任何環境變量,但是打開Eclipse或者Idea等IDE,依然可以正常開發跑項目。嘗試至此,似乎證明了長久以來大家配置環境變量只是思維和行為固化后的自以為是,純粹是多此一舉,對日常開發調試並沒有卵用。難道,這么多程序員都在信奉了一個錯誤的認知而且絲毫不覺得有異?
要搞解開這個疑惑,還是得搞清楚環境變量到底是干什么的,為什么要配置它。所謂環境變量,其實就是操作系統中用來指定操作系統運行環境的一些參數,比如臨時文件夾位置和系統文件夾位置等。當要求系統運行一個程序而沒有告訴它程序所在的完整路徑時,系統除了在當前目錄下面尋找此程序外,還應到環境變量的PATH中指定的路徑值去找。也就是說當執行可執行文件找不到位置的時候,就會去PATH中配置的路徑去找。這里你可以做個小測試,就是任意位置新建一個哪怕普通文本文件,將其路徑配置成環境變量,然后通過cmd命令行輸入文件名,都能打開那個文件,這就環境變量的功勞。因此可以設想如果直接在可執行文件所在文件夾取執行,那不就是找得到嗎?為了證明,博主先打開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就只能戛然而止了,實在不想多叨叨如何配置那不必要的玩意兒了。當然,或許我前文的嘗試和總結很有問題,因為配置了多年環境變量的博主自己一直都還在懷疑上文的嘗試是否正確,也誠心希望各路大神指出闡述中的問題,共同來探討環境變量配置的必要性和可用之處,以免誤導他人;