天天用的開發環境 你真的瞭解嗎?
無論你從事的是Donet,還是Java;無論是架構師,還是編碼開發者;幾乎每個程式設計師,都或多或少有自己的程式設計習慣。不管是VS,還是Eclipse、MyEclipse、NetBeans,亦或是其他的開發工具,大家都會根據自己的性格與習慣,個性化的設定自己的開發工具。
開發者使用這些工具,可以快速的進行軟體開發,但對於這些工具是怎麼樣工作的,你都瞭解嗎?答案是:未必!
VB
之前,我做過一年Visual Basic的開發。VB很簡單,語法檢查不嚴格,儘管寫的程式碼非常不規範,但是它能執行出結果!大家都知道,VB語言是有缺陷的,不規範、甚至不合理的程式碼通常情況下能夠正常執行,對於企業級開發,這是非常危險的事情。不便於閱讀,不便於管理(當然,不完全物件導向是它另一個軟肋)。同時,這種語法檢查的不嚴格,也正是VB的一大優點:程式設計門檻低,好入門。我想也許就是VB語言延續至今的一個很重要的原因。現在回想起來,那時使用的VB開發工具,其實是最複雜的。編碼、測試、執行,一個VB開發工具就全包了。這時,或許你就知道,安裝一個VB的開發環境,為什麼需要花費那麼長時間。因為它不僅僅是一個IDE,更是要準備一個編譯、執行的環境。
Donet
相比而言,Visual Studio這款軟體就堪稱完美了。之所以稱它為完美,是因為它幾乎做了所有能做的事情:開發中各種控制元件的支援、各種方式的除錯、編譯、以及它的執行,以及與UML相關功能相結合,等等。可以說,VS也是一個大熔爐,恰到好處的融匯了各種。不得不感嘆微軟巧奪天工的設計。這種設計,大大的便利了開發人員的開發。程式設計師只需要遵守相關的規範,就可以及大可能的編寫業務相關的程式碼。像環境變數配置、外掛配置、程式設計規範統一等等,微軟都已經做好了,程式設計師需要做的就是遵守規範,只要你忍受的了微軟的條條框框,它就是你最得力的開發工具。它完美的就像《火影》裡的佐助,註定了天之驕子的destiny。大家可以點此更多瞭解: Microsoft Visual Studio。
Java
與VS相比,Java就沒有一個這麼完美的工具了。起碼現在是沒有。那將來會不會有呢?我想不會,像Eclipse,它擁有的就是一種殘缺的美。MyEclipse應該是仿照VS在Eclipse基礎上做的,但是我想更多人選擇的會是Eclipse。Java的開發就不是一個工具就能解決的了。大家都知道:最基本的,首先需要安裝JDK(Java Development Kit)Java開發工具包和Jre(Java Runtime Environment)Java執行環境,以及需要使用者手動配置相應的環境變數。儘管如此還不夠,因為這樣還是僅僅能夠進行簡單的J2SE開發。像企業級開發,就需要在Eclipse的基礎上安裝一些外掛,與各種框架進行整合,必須有相應的應用伺服器。
它需要使用者手動做很多。所以,我對Eclipse的最初認識就是:它並沒有像VS一樣那麼面面俱到,實現那麼豐富的功能。它提供的僅僅是一個開發環境以及不完整的除錯環境(像遠端除錯、WebService等開發的除錯,Eclipse自身是非常吃力的,需要其他外掛來整合)。但是,隨著工作經歷的增長,你會越來越發現Eclipse的牛X。Eclipse是綠色的,無需安裝,拷過來就能用。同時,它能輕鬆的整合各種外掛、整合各種框架、整合各種你想得到、想不到的工具。Eclipse就像是《火影》裡的鳴人,看似笨拙,自己沒啥功能;實則大巧若拙,以他人整合就會變成一把利器。
(好好想一想,實際中,Donet與Java確實像是鳴人跟佐助一樣。)
我們來看看Eclipse是怎樣輔助我們工作的:上面已經提到的,使用Eclipse可以依據JDK,進行一般J2SE的開發。編譯後的程式根據JRE中的java虛擬機器就能夠執行;Java的開發中,開發環境與執行環境是分開的,這點你必須要弄明白!所以,Eclipse提供了多種引入依賴包的方式:在開發環境中,像一個專案中的Jre、Junit依賴包,或者你自己手動建立的User Library引用包,這些依賴的Jar在打包時是不會打進專案Jar或者war裡面的,它們起到的作用只有一個:輔助開發。它們執行時的執行環境,就需要有它的執行環境裡面有相應的依賴包。拿Jboss來舉例,開發環境中引入的各種依賴,如果執行時還需要這些依賴(比如測試的包可以不引入),那麼在Jboss的lib或者熱部署目錄就需要有這些包!對於一個Web專案,我們可以將依賴包考入專案的lib目錄下,那麼在打包的時候,這些依賴包就會一起打入jar中。
如果我們用Maven管理專案,Maven有自己的一套打包規則。這些規則要區別於Eclipse開發環境中引入的各種依賴,具體的說,與Eclipse開發環境中引入的依賴,只有橫向關係沒有縱向關係。也就是說,他們僅僅是在開發時,方便開發人員引入對應的引用。
Maven打包時,會根據Pom裡面引入依賴設定的scope(這裡不詳細介紹,具體內容大家可以自己百度搜尋,也可以關注我的後續介紹Maven的系列文章)屬性,根據這個值,Maven會選擇性將依賴打入Jar的依賴包或者不打入Jar的依賴包。同樣,如果不打入Jar的依賴包,執行環境需要的話,就需要執行環境裡面有相應的Jar包。
說了這麼多,你一定想要問一句:Java開發,為什麼需要將開發環境與執行環境分開呢?解耦合。Java世界中,沒有一家像微軟一樣“一言堂”的公司,為了和好的調和大家,Eclipse這種利用跟他人合作,放大自己光芒的方式,確實更高一籌。將開發環境與執行環境分開,無疑是為了解耦合。耦合解開了,世界也就和諧了。
其實,Eclipse就是一個老好人,另一個證據就是:我們可以到Mule的官網檔一個開發環境下來,我們會發現,它就是一個Eclipse,在純粹的Eclipse的基礎上,安裝了一些外掛,做了一些Mule所需要的自己的配置。
其實,本文想要表達的意思就是講解一下Java開發的環境,以及它執行時內部是如何工作的。同時,也告訴大家:越是在我們身邊的熟悉的東西,我們越是不一定了解它。實際的工作效率卻往往相反,我們越是瞭解它,越會提高我們的工作效率,工作起來也輕鬆。
相關文章
- 天天用的開發環境,你真的瞭解嗎?開發環境
- 你真的瞭解Event Loop(事件環)嗎?OOP事件
- ViewStub你真的瞭解嗎View
- 你真的瞭解mongoose嗎?Go
- 你真的瞭解 WebSocket 嗎?Web
- 你瞭解你和程式碼的生存環境嗎
- 【開發必看】你真的瞭解迴流和重繪嗎?
- JavaScript 你真的瞭解this指向嗎JavaScript
- 你真的瞭解前端路由嗎?前端路由
- 你真的瞭解RPC嗎?RPC
- 你真的瞭解URLEncode嗎?
- 你真的瞭解“密碼”嗎?密碼
- 你真的瞭解nosql世界嗎?SQL
- 你真的瞭解深度學習嗎?深度學習
- 你真的瞭解 Cookie 和 Session 嗎?CookieSession
- 你真的瞭解 Cookie 和 Session 嗎CookieSession
- 你真的瞭解npm-scripts嗎?NPM
- 你真的瞭解 Session 和 Cookie 嗎?SessionCookie
- 你真的瞭解js運算子嗎JS
- 你真的瞭解HTTP快取嗎HTTP快取
- 你真的會搭建測試環境嗎?
- 注意!JS的結構你真的瞭解嗎?JS
- 5款Linux桌面環境,你都瞭解嗎?Linux
- platform 模組 你真的瞭解你的計算機嗎?Platform計算機
- 你真的瞭解 React 生命週期嗎React
- 你真的瞭解 OkHttp 快取控制嗎?HTTP快取
- AnyForWeb分享:畫素!你真的瞭解嗎?Web
- 直播系統開發中關於開發環境你瞭解多少?開發環境
- 你真的瞭解python嗎?這篇文章帶你快速瞭解!Python
- 你真的對 Linux 中的 Inode 瞭解嗎?Linux
- stl中的sort函式,你真的瞭解嗎函式
- 你真的瞭解JS陣列的那些方法嗎?JS陣列
- 你真的瞭解 NDK 和 jni 的區別嗎
- C++的那些事:你真的瞭解引用嗎C++
- Java併發(7)- 你真的瞭解 ReentrantReadWriteLock 嗎?Java
- 你真的瞭解你的團隊嗎? ONA告訴你真相
- 你真的瞭解響應式佈局嗎?
- 你真的瞭解延時佇列嗎(一)佇列