【編者按】作者 劉正權是CSDN的一名博主。在他看來,無論你從事的是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開發的環境,以及它運行時內部是如何工作的。同時,也告訴大家:越是在我們身邊的熟悉的東西,我們越是不一定了解它。實際的工作效率卻往往相反,我們越是了解它,越會提高我們的工作效率,工作起來也輕松。
轉自: CSDN博客