你好,我是A哥(YourBatman)。java
有一個觀點:若一個Java開發者能把IDEA玩得666,則技術必定不會差;但若玩不轉IDEA(如不會設置、定製、解決平常問題、快捷鍵等等),那大機率水平很通常。由於高手通常得有高手的樣子,你贊成這個觀點嗎?程序員
經過上篇文章 你也瞭解到,現今的Javaer絕大部分都使用IntelliJ IDEA做爲IDE進行開發,但同時發現(從身邊同事調查)大部分同窗都並不能很好的使用IDEA,其中表現最爲突出的是IDEA裏的Project和Module兩個概念,混淆不清或者概念徹底扭曲。編程
A哥是一個相對來說很注重基礎知識搭建的Javaer,因此對於最經常使用的工具也是如此,願意花些時間去搞明白,包括頁佈局、功能定製、插件、以及快捷鍵都會調爲本身最順手的狀態,畢竟工欲善其事,必先利其器。架構
本文將着眼於幫你深刻的介紹IntelliJ IDEA裏最重要的兩個概念:Project和Module,它是最最最基礎也是最重要的,我認爲本文不只適合使用IDEA的萌新,一樣適合使用IDEA的「老手」(曾經eclipse的重度用戶尤甚)。eclipse
IntelliJ IDEA相較於Eclipse可謂是後起之秀,2006年開始嶄露頭角,2012年總體性能上完敗Eclipse,2016年市場份額完成全面超越,一步步的逐漸成爲JVM平臺的主流IDE。maven
正是因爲有這樣的歷史進程,有大批「老」程序員是從Eclipse過分到IDEA來的,所以就有了一個頗具表明性的概念對比表格,方便「遷移」:ide
誠然,IntelliJ IDEA的使用成本比eclipse略高,在那樣的歷史背景下,這張表格確實下降了「老」程序員們的遷移過分成本,即便如今看來這張表格的描述並不許確,設置具備極大的誤導做用(反作用開始展示......)。工具
IDEA和eclipse的概念類比上,最「著名」的當屬把IDEA的Project比做Eclipse的Workspace,回憶下你當初是否是常常聽到這樣的聲音?博客文章這樣說、培訓機構老師這樣說、甚至大學的老師也是教你這麼去理解的。更有甚者,對於不少「中毒」很深的、曾經的eclipse用戶來講,他們是這樣使用IDEA的:佈局
實現了所謂的:IDEA在同一窗口顯示多個項目。若你發現你身邊有這麼樣管理項目的同事,那麼他是你的「前輩」沒跑了,由於鐵定是eclipse的資深用戶,而後遷移到IDEA來。性能
這種作法是錯誤的,絕不相干的項目(遠程調用不叫有關係)沒有理由放在同一視窗內,除了干擾仍是干擾。Eclipse裏有workspace工做空間的概念尚可理解,可IDEA裏是絕對不要這麼作。
在 IntelliJ IDEA 中,沒有相似於 Eclipse 工做空間(Workspace)的概念,而是提出了Project和Module這兩個概念。本文來告訴你,IntelliJ IDEA是如何管理項目Project、模塊Module以及它倆關係,看完以後你會發現單這一點IntelliJ IDEA就比Eclipse優秀得多。
Eclipse中一個Workspace能夠包括多個Project,而在IDEA裏Project是頂級概念。
Project(翻譯爲:項目)IntelliJ IDEA的頂級組織單元,它是個邏輯概念。通常來講一個Project表明一個完整的解決方案,如它可包含多個部分,如:
也就是說Project是個完總體,是個資源的集合,扔到任何地方都是能夠被解釋的。
說明:建議把Project翻譯爲項目,而非工程,不在一個維度。由於一個module其實也能夠理解爲一個工程,避免混淆
模塊是是項目Project的一部分,必須隸屬於Project而存在。它能夠獨立編譯、測試、運行甚至部署。
模塊是分而治之思想的體現,是下降大型項目複雜度的一種有效手段。模塊是可重用的,若須要,一個模塊能夠被多個模塊引用,甚至多個Project項目引用(好比commons模塊)。
此處強烈再也不建議你把Eclipse的Workspace引入進來作類比,那隻會把你帶跑偏了。細品這兩個概念定義,總結一下:
優勢:
弊端:
ProcessService
,那麼在你查找的時候永遠沒法「精肯定位」這種使用方式界面清爽,運行流暢,解決了上面錯誤方式的全部弊端。
萬丈高樓平地起,使用IDEA的第一步必定是新建一個項目Project:
或者你也能夠在視窗內部新建,頂部菜單欄File -> New -> 三選一
:
三種建立方式:
本文就以1爲例,由於2和3從本質上講都叫打開項目,並不會經歷建立流程。下面咱們按步驟走一篇建立流程:
第一步:選擇建立項目的方式,本文選擇建立建立Java項目
第二步:選擇根據模版建立項目。這個在maven還沒出現以前挺有用,如今幾乎不用了,所以通常都不勾選
第三步:填寫項目名、項目位置(以及同步建立的模塊名、位置等,可選)
More Setttings
選項默認是收起狀態,也就是說大多數狀況下建立時你並不須要修改同步建立的模塊的這些信息,而實際上也確實是這麼幹的。
點擊Finish,IDEA 100%就會在新窗口(或者覆蓋本窗口)打開新建立的這個項目:
該項目在硬盤裏的表現形式僅僅是一個文件目錄而已:
每一個Project項目都對應1個 .idea文件夾(隱藏目錄),該項目全部特定設置都存儲在該.idea文件夾下,好比項目模塊信息、依賴信息等等。
通常來說它裏面會有這些文件/目錄:
misc.xml
:描述該項目一些混雜信息,如SDK、語言等級、項目輸出的目錄等等modules.xml
:描述該項目有哪些Module模塊workspace.xml
:描述視窗的信息。如Project窗口在左邊仍是右邊,窗體大小,顏色,是否隱藏,滾動狀況等等(每一個Project都容許你個性化配置,規則都被記錄在這個文件裏)vcs.xml
:使用的VCS工具信息,如Git除了這些,一些插件也常常會往這個目錄增長文件,如:
saveactions_settings.xml
:saveaction插件的專屬配置文件jarRepositories.xml
:遠程倉庫配置文件encodings.xml
:描述模塊文件夾編碼信息的配置文件compiler.xml
:描述每一個module模塊使用的編譯器信息的文件。如使用1.8編譯,是否加了編譯參數-parameters
等等都在這裏體現總的來說,這個文件夾裏面的東西不用關心,由IDEA/插件本身自動維護,咱們只須要界面化操做便可。固然嘍,若瞭解一二對於定位一些常見問題(如不知-parameters
是否生效)是有幫助的。
建立好一個Project默認會有一個同名的的module(Empty Project除外),若是項目比較小複雜度較低,一個模塊足矣。可是,稍微有點複雜性的項目通常都但願進行模塊拆分,創建多個模塊,分而治之。好比:
第一步:頂部菜單欄給該項目建立模塊
固然還有一種方式是在Project Structure
裏建立(這個我們下篇文章再聊):
第二步:選擇該模塊類型,能夠是Java項目、maven項目、Kotlin項目等等都行
第三步:給模塊命名,並制定該module模塊的存在位置。通常來說只須要寫名稱便可,模塊的路徑默認會放在project目錄的子目錄下
關於目錄選擇再強調一遍:默認狀況下模塊路徑會在Project(或者父模塊)的子目錄下,但這並非必須的,你也能夠改成和Project的同級目錄也是能夠的,邏輯上依舊屬於Project的模塊,不會有問題。但通常建議保持這種層級關係而不要修改~
如果父子目錄,層級關係更明顯些,不然是一種plat平鋪目錄關係,看着會不太「舒服」
點擊Finish,在Project視窗就能夠看見該模塊啦(層級結構展現哦):
這個時候的Project - Module層級結構圖是這樣子的:
這時我就拋出一個問題,若要實現下圖這種層次結構(plat所有平級),新建模塊時須要注意些什麼呢?
模塊建立好後,這時再看看.idea
這個文件夾裏的modules.xml
,內容爲:
每一個Module模塊都對應一個同名的 .iml文件,用於描述該模塊的相關信息。如:SDK、語言等級、依賴、源代碼所在位置、輸出路徑等等。
本文主題是介紹IDEA的Project和Module兩個重要概念,而後再經過具體示例的方式加深理解,講的仍是比較清楚的(多是全網最清楚的?),但願能夠幫助到你加深對IDEA的理解,不再要把IDEA的Project比做Eclipse的Workspace。
簡單總結一下本文內容:
下篇預告:在IDEA中,對項目結構Project Structure
的設置尤其重要,下篇就爲你剖析該頁面每一個tab選項,到底如何玩轉它,具有一個高手的樣子,這對你理解Maven項目也將很是很是有幫助,敬請關注
本文所屬專欄:IDEA,後臺回覆專欄名便可獲取所有內容,已被https://www.yourbatman.cn收錄。
看完了不必定懂,看懂了不必定會。來,文末3個思考題幫你覆盤:
System.out.println("點個贊吧!"); print_r('關注【BAT的烏托邦】!'); var_dump('私聊A哥:fsx1056342982'); console.log("點個贊吧!"); NSLog(@"關注【BAT的烏托邦】!"); print("私聊A哥:fsx1056342982"); echo("點個贊吧!"); cout << "關注【BAT的烏托邦】!" << endl; printf("私聊A哥:fsx1056342982"); Console.WriteLine("點個贊吧!"); fmt.Println("關注【BAT的烏托邦】!"); Response.Write("私聊A哥:fsx1056342982"); alert("點個贊吧!");
做者簡介:A哥(YourBatman),Spring Framework/Boot開源貢獻者,Java架構師,領域專家,DDD驅動設計。很是注重基本功修養,底層基礎決定上層建築,才能煥發程序員更強生命力。擅長結構化拆解專題,抽絲剝繭頗具深度。這些專題也許可能大概是全網最好或獨一份哦,歡迎自取。