新聞中心
前言

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比雁峰網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式雁峰網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋雁峰地區(qū)。費(fèi)用合理售后完善,10年實(shí)體公司更值得信賴。
你好,我是A哥(YourBatman)。
有一個(gè)觀點(diǎn):若一個(gè)Java開發(fā)者能把IDEA玩得666,則技術(shù)一定不會(huì)差;但若玩不轉(zhuǎn)IDEA(如不會(huì)設(shè)置、定制、解決日常問題、快捷鍵等等),那大概率水平很一般。因?yàn)楦呤忠话愕糜懈呤值臉幼樱?/strong>你同意這個(gè)觀點(diǎn)嗎?
通過上篇文章 你也了解到,現(xiàn)今的Javaer絕大部分都使用IntelliJ IDEA作為IDE進(jìn)行開發(fā),但同時(shí)發(fā)現(xiàn)(從身邊同事調(diào)查)大部分同學(xué)都并不能很好的使用IDEA,其中表現(xiàn)最為突出的是IDEA里的Project和Module兩個(gè)概念,混淆不清或者概念完全扭曲。
A哥是一個(gè)相對(duì)來講很注重基礎(chǔ)知識(shí)搭建的Javaer,所以對(duì)于最常用的工具也是如此,愿意花些時(shí)間去搞明白,包括頁布局、功能定制、插件、以及快捷鍵都會(huì)調(diào)為自己最順手的狀態(tài),畢竟工欲善其事,必先利其器。
本文將著眼于幫你深入的介紹IntelliJ IDEA里最重要的兩個(gè)概念:Project和Module,它是最最最基礎(chǔ)也是最重要的,我認(rèn)為本文不僅適合使用IDEA的萌新,同樣適合使用IDEA的“老手”(曾經(jīng)eclipse的重度用戶尤甚)。
本文提綱
版本約定
- IntelliJ IDEA:2020.3.1
正文
IntelliJ IDEA相較于Eclipse可謂是后起之秀,2006年開始嶄露頭角,2012年整體性能上完敗Eclipse,2016年市場(chǎng)份額完成全面超越,一步步的逐漸成為JVM平臺(tái)的主流IDE。
正是由于有這樣的歷史進(jìn)程,有大批“老”程序員是從Eclipse過度到IDEA來的,因此就有了一個(gè)頗具代表性的概念對(duì)比表格,方便“遷移”:
誠然,IntelliJ IDEA的使用成本比eclipse略高,在那樣的歷史背景下,這張表格確實(shí)降低了“老”程序員們的遷移過度成本,即使現(xiàn)在看來這張表格的描述并不準(zhǔn)確,設(shè)置具有極大的誤導(dǎo)作用(副作用開始展現(xiàn)......)。
IDEA和eclipse的概念類比上,最“著名”的當(dāng)屬把IDEA的Project比作Eclipse的Workspace,回憶下你當(dāng)初是不是經(jīng)常聽到這樣的聲音?博客文章這樣說、培訓(xùn)機(jī)構(gòu)老師這樣說、甚至大學(xué)的老師也是教你這么去理解的。更有甚者,對(duì)于很多“中毒”很深的、曾經(jīng)的eclipse用戶來說,他們是這樣使用IDEA的:
實(shí)現(xiàn)了所謂的:IDEA在同一窗口顯示多個(gè)項(xiàng)目。若你發(fā)現(xiàn)你身邊有這么樣管理項(xiàng)目的同事,那么他是你的“前輩”沒跑了,因?yàn)殍F定是eclipse的資深用戶,然后遷移到IDEA來。
這種做法是錯(cuò)誤的,毫不相干的項(xiàng)目(遠(yuǎn)程調(diào)用不叫有關(guān)系)沒有理由放在同一視窗內(nèi),除了干擾還是干擾。Eclipse里有workspace工作空間的概念尚可理解,可IDEA里是絕對(duì)不要這么做。
在 IntelliJ IDEA 中,沒有類似于 Eclipse 工作空間(Workspace)的概念,而是提出了Project和Module這兩個(gè)概念。本文來告訴你,IntelliJ IDEA是如何管理項(xiàng)目Project、模塊Module以及它倆關(guān)系,看完之后你會(huì)發(fā)現(xiàn)單這一點(diǎn)IntelliJ IDEA就比Eclipse優(yōu)秀得多。
Project和Module概念
什么是Project
Eclipse中一個(gè)Workspace可以包括多個(gè)Project,而在IDEA里Project是頂級(jí)概念。
Project(翻譯為:項(xiàng)目)IntelliJ IDEA的頂級(jí)組織單元,它是個(gè)邏輯概念。一般來說一個(gè)Project代表一個(gè)完整的解決方案,如它可包含多個(gè)部分,如:
- 源代碼
- 構(gòu)建腳本
- 配置文件
- 文檔
- SDK
- 依賴庫
- ...
也就是說Project是個(gè)完整體,是個(gè)資源的集合,扔到任何地方都是可以被解釋的。
說明:建議把Project翻譯為項(xiàng)目,而非工程,不在一個(gè)維度。因?yàn)橐粋€(gè)module其實(shí)也可以理解為一個(gè)工程,避免混淆
什么是Module
模塊是是項(xiàng)目Project的一部分,必須隸屬于Project而存在。它可以獨(dú)立編譯、測(cè)試、運(yùn)行甚至部署。
模塊是分而治之思想的體現(xiàn),是降低大型項(xiàng)目復(fù)雜度的一種有效手段。模塊是可重用的,若需要,一個(gè)模塊可以被多個(gè)模塊引用,甚至多個(gè)Project項(xiàng)目引用(比如commons模塊)。
此處強(qiáng)烈不再建議你把Eclipse的Workspace引入進(jìn)來做類比,那只會(huì)把你帶跑偏了。細(xì)品這兩個(gè)概念定義,總結(jié)一下:
1.在IDEA中,Project項(xiàng)目是最頂級(jí)的結(jié)構(gòu)單元,一個(gè)IDEA視窗有且只能代表一個(gè)Project
現(xiàn)在知道為何把user、account、order扔到一個(gè)視窗里有多么的不合適了吧
2.一個(gè)Project由一個(gè)or多個(gè)Module模塊組成,對(duì)于大型項(xiàng)目來講一般會(huì)有N多個(gè)module組成,如dubbo項(xiàng)目結(jié)構(gòu)如下圖所示:
3.一個(gè)module模塊里,依舊可以有子模塊,曾經(jīng)可無限延伸(但不建議太多)
4.Project是個(gè)邏輯概念,Module才是最終的存在形式
錯(cuò)誤使用
優(yōu)點(diǎn):
1.一個(gè)窗口,能看見全貌
弊端:
2. 視窗功能不單一。account、order、user屬于不同項(xiàng)目,是為了解決不同問題而存在,沒有理由放在一起 3. 干擾性太強(qiáng)。比如他們?nèi)加蓄惤蠵rocessService,那么在你查找的時(shí)候永遠(yuǎn)無法“精確定位”
3.額外性能開銷。比如你只想開發(fā)user,但還得把其它的加載進(jìn)來,完全沒有必要嘛。
說明:idea不能像eclipse一樣close project的,畢竟人家那是workspace的概念,而idea同一視窗屬于同一項(xiàng)目,總不能說關(guān)閉某個(gè)模塊吧,模塊一般相關(guān)性很強(qiáng),完全沒必要單獨(dú)開/關(guān)
想一想,若你一個(gè)人負(fù)責(zé)了20+個(gè)項(xiàng)目,每次打開是不是得花上個(gè)幾分鐘呢?
4.概念上混亂。這么放在一起,其實(shí)就不是user項(xiàng)目、order項(xiàng)目了,而是user模塊、order模塊,很明顯概念上就不準(zhǔn)確了
正確使用
這種使用方式界面清爽,運(yùn)行流暢,解決了上面錯(cuò)誤方式的所有弊端。
新建項(xiàng)目Project
萬丈高樓平地起,使用IDEA的第一步一定是新建一個(gè)項(xiàng)目Project:
或者你也可以在視窗內(nèi)部新建,頂部菜單欄File -> New -> 三選一:
三種創(chuàng)建方式:
- 創(chuàng)建一個(gè)全新項(xiàng)目
- 打開現(xiàn)有項(xiàng)目
- 從VCS版本控制系統(tǒng)里clone一個(gè)項(xiàng)目
本文就以1為例,因?yàn)?和3從本質(zhì)上講都叫打開項(xiàng)目,并不會(huì)經(jīng)歷創(chuàng)建流程。下面我們按步驟走一篇?jiǎng)?chuàng)建流程:
第一步:選擇創(chuàng)建項(xiàng)目的方式,本文選擇創(chuàng)建創(chuàng)建Java項(xiàng)目
第二步:選擇根據(jù)模版創(chuàng)建項(xiàng)目。這個(gè)在maven還沒出現(xiàn)之前挺有用,現(xiàn)在幾乎不用了,因此一般都不勾選
第三步:填寫項(xiàng)目名、項(xiàng)目位置(以及同步創(chuàng)建的模塊名、位置等,可選)
①:項(xiàng)目存儲(chǔ)位置,一般作為整個(gè)項(xiàng)目的根目錄
②:內(nèi)容根目錄
③:模塊文件存放的目錄
④:項(xiàng)目格式文件(IDEA負(fù)責(zé)識(shí)別,后面它還會(huì)出鏡)
More Setttings選項(xiàng)默認(rèn)是收起狀態(tài),也就是說大多數(shù)情況下創(chuàng)建時(shí)你并不需要修改同步創(chuàng)建的模塊的這些信息,而實(shí)際上也確實(shí)是這么干的。
點(diǎn)擊Finish,IDEA **100%**就會(huì)在新窗口(或者覆蓋本窗口)打開新創(chuàng)建的這個(gè)項(xiàng)目:
該項(xiàng)目在硬盤里的表現(xiàn)形式僅僅是一個(gè)文件目錄而已:
.idea文件夾的作用
每個(gè)Project項(xiàng)目都對(duì)應(yīng)1個(gè) .idea文件夾(隱藏目錄),該項(xiàng)目所有特定設(shè)置都存儲(chǔ)在該.idea文件夾下,比如項(xiàng)目模塊信息、依賴信息等等。
一般來講它里面會(huì)有這些文件/目錄:
- misc.xml:描述該項(xiàng)目一些混雜信息,如SDK、語言等級(jí)、項(xiàng)目輸出的目錄等等
- modules.xml:描述該項(xiàng)目有哪些Module模塊
- workspace.xml:描述視窗的信息。如Project窗口在左邊還是右邊,窗體大小,顏色,是否隱藏,滾動(dòng)情況等等(每個(gè)Project都允許你個(gè)性化配置,規(guī)則都被記錄在這個(gè)文件里)
- vcs.xml:使用的VCS工具信息,如Git
除了這些,一些插件也經(jīng)常會(huì)往這個(gè)目錄增加文件,如:
- saveactions_settings.xml:saveaction插件的專屬配置文件
- jarRepositories.xml:遠(yuǎn)程倉庫配置文件
- encodings.xml:描述模塊文件夾編碼信息的配置文件
- compiler.xml:描述每個(gè)module模塊使用的編譯器信息的文件。如使用1.8編譯,是否加了編譯參數(shù)-parameters等等都在這里體現(xiàn)
總的來講,這個(gè)文件夾里面的東西不用關(guān)心,由IDEA/插件自己自動(dòng)維護(hù),我們只需要界面化操作即可。當(dāng)然嘍,若了解一二對(duì)于定位一些常見問題(如不知-parameters是否生效)是有幫助的。
新建模塊Module
創(chuàng)建好一個(gè)Project默認(rèn)會(huì)有一個(gè)同名的的module(Empty Project除外),如果項(xiàng)目比較小復(fù)雜度較低,一個(gè)模塊足矣。但是,稍微有點(diǎn)復(fù)雜性的項(xiàng)目一般都希望進(jìn)行模塊拆分,建立多個(gè)模塊,分而治之。比如:
- hello-service:實(shí)現(xiàn)核心業(yè)務(wù)功能處理
- hello-persistence:復(fù)雜持久化工作
- hello-client:作為客戶端暴露出去
第一步:頂部菜單欄給該項(xiàng)目創(chuàng)建模塊
當(dāng)然還有一種方式是在Project Structure里創(chuàng)建(這個(gè)咱們下篇文章再聊):
第二步:選擇該模塊類型,可以是Java項(xiàng)目、maven項(xiàng)目、Kotlin項(xiàng)目等等都行
第三步:給模塊命名,并制定該module模塊的存在位置。一般來講只需要寫名稱即可,模塊的路徑默認(rèn)會(huì)放在project目錄的子目錄下
關(guān)于目錄選擇再強(qiáng)調(diào)一遍:默認(rèn)情況下模塊路徑會(huì)在Project(或者父模塊)的子目錄下,但這并不是必須的,你也可以改為和Project的同級(jí)目錄也是可以的,邏輯上依舊屬于Project的模塊,不會(huì)有問題。但一般建議保持這種層級(jí)關(guān)系而不要修改~
- 若是父子目錄,層級(jí)關(guān)系更明顯些,否則是一種plat平鋪目錄關(guān)系,看著會(huì)不太“舒服”
點(diǎn)擊Finish,在Project視窗就可以看見該模塊啦(層級(jí)結(jié)構(gòu)展示哦):
這個(gè)時(shí)候的Project - Module層級(jí)結(jié)構(gòu)圖是這樣子的:
這時(shí)我就拋出一個(gè)問題,若要實(shí)現(xiàn)下圖這種層次結(jié)構(gòu)(plat全部平級(jí)),新建模塊時(shí)需要注意些什么呢?
模塊創(chuàng)建好后,這時(shí)再看看.idea這個(gè)文件夾里的modules.xml,內(nèi)容為:
xxx.iml文件的作用
每個(gè)Module模塊都對(duì)應(yīng)一個(gè)同名的 .iml文件,用于描述該模塊的相關(guān)信息。如:SDK、語言等級(jí)、依賴、源代碼所在位置、輸出路徑等等。
總結(jié)
本文主題是介紹IDEA的Project和Module兩個(gè)重要概念,然后再通過具體示例的方式加深理解,講的還是比較清楚的(可能是全網(wǎng)最清楚的?),希望可以幫助到你加深對(duì)IDEA的理解,再也不要把IDEA的Project比作Eclipse的Workspace。
簡單總結(jié)一下本文內(nèi)容:
- Project是一個(gè)不具備任何編碼設(shè)置、構(gòu)建等開發(fā)功能的概念,主要作用就是起到一個(gè)項(xiàng)目定義、范圍約束的效果(比如user項(xiàng)目,里面所有內(nèi)容應(yīng)該是為了解決user問題而存在的),你也可以理解它就是一個(gè)目錄,然后這個(gè)目錄的名字就代表項(xiàng)目名
- Module模塊是代碼的實(shí)際表現(xiàn)形式。在默認(rèn)情況下,一個(gè)Project對(duì)應(yīng)一個(gè)Module,它倆“合二為一”,對(duì)于中大型項(xiàng)目來說,一般都會(huì)使用多模塊編程
下篇預(yù)告:在IDEA中,對(duì)項(xiàng)目結(jié)構(gòu)Project Structure的設(shè)置尤為重要,下篇就為你剖析該頁面每個(gè)tab選項(xiàng),到底如何玩轉(zhuǎn)它,具備一個(gè)高手的樣子,這對(duì)你理解Maven項(xiàng)目也將非常非常有幫助,敬請(qǐng)關(guān)注
本文思考題
看完了不一定懂,看懂了不一定會(huì)。來,文末3個(gè)思考題幫你復(fù)盤:
- IDEA的Project和eclipse的workspace的本質(zhì)區(qū)別在哪里?
- 如何給Project/module單獨(dú)添加依賴庫?
- IDEA模塊的.iml文件有什么作用?
當(dāng)前名稱:誰再把IDEA的Project比作Eclipse的Workspace,我就跟誰急
分享地址:http://www.dlmjj.cn/article/ccsccgo.html


咨詢
建站咨詢
