天天用的開發環境 你真的瞭解嗎?

劉正權發表於2014-06-05

  無論你從事的是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開發的環境,以及它執行時內部是如何工作的。同時,也告訴大家:越是在我們身邊的熟悉的東西,我們越是不一定了解它。實際的工作效率卻往往相反,我們越是瞭解它,越會提高我們的工作效率,工作起來也輕鬆。 

相關文章