你好,我是A哥(YourBatman)。java
如何給Module模塊單獨增長依賴?
如何知道哪些Module模塊用了Spring框架,哪些是web工程?
IDEA如何打Jar包?打War包?程序員
熟練的正確使用IntelliJ IDEA,是一個「高手」該有的樣子,由於那是你的門面。上篇文章 重點介紹了IDEA裏最爲重要的兩個概念:Project項目和Module模塊。相信你看完後不再會把IDEA的Project比做Eclipse的Workspace,而且對IDEA有了一份更深的瞭解。web
本文繼續理解IDEA對項目、模塊的管理。管理項目是一個IDE的基本功能,但每每最基礎的是最重要的更是最容易被忽略的。所以本文是你更好去理解IDEA管理maven結構、gradle結構、Spring Boot項目結構的基礎,萬丈高樓平地起,它就是這個地基。上層結構再怎麼繁繁多變,異曲同工最終都由Project Structure來體現,從而給開發者以幾近相同的編碼體驗。網絡
Project Structure是一個你開發過程當中偶爾/常常會打開,但卻不多用心留意的窗口。不一樣於通常設置窗口,它和項目的緊密度很是的高且有必定理解難度,若設置不當項目可能沒法運行甚至沒法編碼(好比編譯報錯、jar包找不着等),爲此我作件通常人都不肯意作的事,對它進行詳解,相信作難事必有所得。架構
本文基於上文已搭建好的hello項目案例,繼續研究其項目結構Project Structure的管理。從結構查看,到修改定製,那麼問題來了,如何打開一個Project項目的結構頁呢?框架
看似一個簡單的操做,裏面其實蘊藏着你對IDEA Project和Module的理解,不然勢必不知從哪下手。據瞭解,也許你是多年的程序員,也未必知道從哪下手。maven
按照通常思惟,會鼠標選中hello,而後右鍵:函數
但對不起,右鍵菜單裏並沒有Project Structure
選項。Project Structure顧名思義,是針對Project維度的結構視窗,而你鼠標選中的hello只是個module,因此天然彈出的是對此module的操做菜單嘍,而非Project的。也許你可能會講:我點擊了Open Module Settings
也打開了Project Structure視窗呀,是的效果上你多是打開了但道理並不是如此,而僅僅是由於把它倆放在了一塊兒(同一視窗)而已。工具
說明:理解IDEA的Project和Module兩大概念,是對IDEA進行一切操做的基礎。前文已很是詳細(多是全網最全)的介紹了它倆,可花幾分鐘前往學習。 點這裏電梯直達
要打開一個Project的結構展現窗口,至少有以下三種辦法,本文都例舉給你。學習
File -> Project Structure
這是我本人最喜歡的方式,至於快捷鍵是哪一個就看你是如何設定的嘍,個人快捷鍵是ctrl + shift + alt + s。
囉嗦一句:建議你操做IDEA多用快捷鍵,那會
大大提升編碼的效率,而且看起來像高手。基本上記住
50
個左右快捷鍵就夠用了,長期以往成了肌肉記憶後這就是你的核心競爭力之一了
打開hello項目的結構頁以下圖所示:
對於這個動做,敏感的你是否有發現:打開項目結構並不須要鼠標選中任何東西(快捷鍵隨意使用),也就是說鼠標失焦狀態都沒問題,何解呢?
回答這個問題並不難,前提是你已經對IDEA的Project概念爛熟於胸。一個Project對應一個視窗,它們是嚴格1:1的關係。換句話講,當前視窗就表明着Project,所以操做本視窗頂部菜單欄就確定是做用在該Project上,又何必專門選中什麼呢?再者,Project只是個邏輯概念,你想選都沒得選中的,因此把視窗看成它就好。有沒有以爲,這和Java中的this
關鍵字調用特別像?
最後,這個問題的答案是:只要鼠標還在IDEA視窗內(該視窗是活躍窗口),那麼對Project就永遠就是「選中」狀態。
項目結構視窗已打開,那接下來重點來嘍。能夠看到它左邊的「菜單欄」,共分爲三個part:
Platform Settings:平臺設置,也叫全局設置。用於管理SDK們(如JDK、Kotlin的SDK等)、全局庫。
其中Project Settings裏面的每一個標籤頁是最經常使用,最關心的。下面就對它的每一個tab頁做出解釋和使用說明。
此視窗能夠看到Project自己的基礎信息。如:名稱、SDK版本、語言等級等等,比較簡單。
對於此頁面的元素,多囉嗦幾句:
爲什麼指定了SDK還要指定語言等級?答:由於SDK版本並不直接決定語言等級。如你用的JDK 11,但依舊能夠把語言等級調爲8來進行編譯/運行
SDK和語言等級Project均可指定,做爲全局默認
Module頁可謂是重點中的重點,甚至是最重要。畢竟Module做爲實際存在形式,全部的源代碼、配置、依賴等都在這裏,所以大有可學呀。
值得注意:Tests測試包裏面的是能夠訪問Sources源碼的,但反過來不行。
每一個模塊都能獨立管理着本身的依賴,這種關係在模塊本身的.iml文件中記錄着。
知識點:
{moduleName}.iml
文件裏既然Module能夠自行管理依賴,那麼如何給該模塊新增依賴呢?
舉個例子,如今須要向hello模塊增長一個commons-io
jar包依賴,能夠點擊Dependencies標籤頁左下角的+號,選擇Library:
而後選擇,若是沒有就選擇New Libarary...
建立一個唄(有就直接用就成):
下面分別演示選擇Java和選擇From Maven兩種不一樣庫的方式:
New Library新建菜單選項中選擇Java
選項:
這種方式簡單的講:從你本機裏選擇一個jar(或者一個目錄裏面包含jar、文檔)就成。優勢是很是輕便,不依賴網絡,缺點是這些jar必須是你本機已實際存在的。
New Library新建菜單選項中選擇From Maven
選項:
輸入GAV(或者關鍵字查找)就能定位到jar,此種方式使用起來其實很是方便,畢竟maven很是好用嘛。缺點天然就是通常狀況下須要都須要依賴於網絡嘍,除非你本地倉庫已存在對應的jar。
經過這兩種方式各執行一次添加新的依賴完成後,再看hello模塊的依賴狀況,效果如圖:
既然依賴變化了,天然而然的也會體如今hello.iml文件裏嘍,來看看:
依賴添加進來,源代碼裏就能夠正常使用啦:
在New Library建立依賴的時候,無論用哪一種方式選中後,它都會彈出這個窗口讓你選擇此依賴的做用範圍
在本例中commons-io是模塊級別,commons-lang3是項目級別。所以hello-client模塊添加依賴時也是可以看到commons-lang3這個依賴的(但看不見commons-io):
當某Library是全部/大部分模塊都須要的依賴時,就能夠上升爲Project級別的依賴,抽取到Libraries標籤頁來統一管理。如圖,由於上面步驟建立的commons-lang3是項目級別的,因此也會出如今這裏。
至於如何建立/添加Project級別的依賴,這裏就不用再贅述了吧,上面【新增依賴】章節已講得很明白。惟一區別在該頁面選好後不用再選擇Library的做用範圍了(由於就是Project級別的嘛),取而代之的是讓你選擇做用的模塊:
固然嘍,你也能夠一個都不選(點擊cancle),那麼該jar只是被建立了,而不做用於任何module模塊。
說明:對於一個多模塊的Project來說,建議 項目使用的全部Jar都放在這裏統一管理,模塊要使用時直接 按需choose就成,而不須要本身再單獨add,方便統一管理
Facets可理解爲用於配置Project項目的框架區,它能看到項目的每一個Module模塊使用的框架、語言等狀況,而且還能夠對它們進行配置。
好比Spring框架,若是某個模塊使用了它就能夠來這裏統一配置。優勢是你會發現藉助IDEA強大的功能它都給你想好了哪些地方可配置,你能夠更改,讓你實現配置界面化。除了Spring,其它框架如Hibernate也是如此~
目前支持的Facets(語言/框架)類型有:
模塊對應的Facets IDEA會自動Detection探測,若沒有你也能夠手動添加。
爲了更形象的描述此tab頁的做用,這裏搬一個我本身生產項目來看看實際效果:
說明:不一樣的Facet對應的最右端窗口內容配置項是不同的。
經過此視窗,能夠看到你當前Project項目,哪些模塊使用了Spring框架,哪些是web項目,一目瞭然。它有個很是大的做用就是站在Project的視角對每一個模塊進行總體把控,好比若你發現有個模塊不須要是web項目(並不須要對外提供服務接口),那鐵定就是多引包了或者職責不清晰致使的,就可立馬針對性解決,消除隱患。
在實際工做中我本身比較頻繁的使用這個功能,用於對模塊性質的定位,好比若是是普通模塊,絕對不容許是web工程,若是不須要依賴Spring絕對不容許成爲Spring工程。由於嚴格控制Jar包依賴、工程性質是應對大型項目的有效手段。
固然嘍,Facets還有個做用是讓IDEA編譯器認識你的模塊,好比若是你是個web模塊,若沒有在Facets裏體現出來,那IDEA就不認識你,就沒法給你提供web的一些便捷操做了。
IDEA如何打Jar包?如何打War包? 來,上菜~
在Maven大行其道的今天,雖然用IDEA打包不多使用了,可是有些時候它對你本地調試仍是蠻有用的,而且對理解maven的打包依舊有效,來,瞭解一下。
Artifacts這個概念不是特別好理解,artifact是maven裏的一個概念,被IDEA借鑑過來。表示某個模塊要何種打包形式,如jar、war exploded、war、ear等等。Artifact是一個項目資源的組合體,整合編譯後的 java 文件,資源文件等。有不一樣的整合方式,好比jar、war、war exploded等等,對於一個module而言,有了Artifact就能夠部署了,相似於maven的package打包。
說明:war 和 war exploded區別就是後者不壓縮,開發時選後者便於實時看到修改文件後的效果
來個栗子,這裏演示下將hello模塊打包成一個Jar:
配置好後,只需頂部菜單欄Build -> Build Artifacts,就能夠打出這個Jar包:
執行完此命令後,在Output Directory
裏就能看到hello.jar這個打包好的文件啦。而後java -jar .\hello.jar
就能運行嘍(由於我們打的是可執行Jar包)。關於使用IDEA打包還包括打可執行jar包、Fatjar、包外引用jar包等等,這裏就不展開了,後面會放在單獨文章裏把各類方式彙總在一塊兒聊聊。
總的來講,不管配置Facets仍是Artifacts,都是Intellij IDEA要求咱們來作的(雖然有些可自動識別),目的是以便其能識別這些文件並整合各插件實現功能(如自動化配置、自動打包),一切爲了編碼體驗和編碼效率。
一箇中大型項目通常有多個模塊,它們各司其職。模塊與模塊之間通常都存在依賴關係,好比常見的xxx-core模塊通常會被其它幾乎全部模塊所依賴。模塊依賴外部庫Library知道怎麼搞了,那麼如何增長本項目的模塊依賴呢?
其實道理和步驟基本同樣,好比hello-core模塊裏有個Person類:
hello-service模塊也須要用到Person類及其功能,那麼就須要把hello-core模塊依賴進來,操做步驟以下:
添加Dependency依賴時,請選擇Module Dependency...
選項:
選擇本項目中須要依賴進來的模塊:
選中hello-core模塊把它依賴到hello-service裏來:
點擊ok,搞定了。對應的,此依賴關係也會體如今hello-service.iml這個配置文件上:
如此,咱們就能夠在hello-service模塊里正常使用Person類啦:
public static void main(String[] args) { System.out.println(new Person()); }
完美。
本文對IntelliJ IDEA的項目結構Project Structure的每一個tab頁進行了全面分析,據我短淺的目光所及,多是全網獨一份寫這個內容的。不少同窗以爲IntelliJ IDEA不須要專門的學習分析,會用它導入maven項目,跑跑main函數啓動下Spring Boot就成啦,我卻不覺得然。
衡量一個新手和一個高手的差別不是順風順水時,而是遇到問題時誰可以快速解決,誰又只能望洋興嘆,相信薪資的差別也體如今此。我見過的「高手」對本身最經常使用的工具用得都是很666的,這不正是技術範該有的樣子麼?說到底,咱們不可能認爲用一指禪敲代碼的人會是大牛嘛~
好啦,關於IDEA的話題暫且先聊到這。其實我想到的主題還有好幾個,如:
有你pick的嗎?歡迎留言告訴我,需求多就儘快上號,否則這個專題就暫時告一段落啦,把時間繼續花在其它專題上啦。
本文所屬專欄: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開源貢獻者,Java架構師,領域專家。文章不標題黨,不譁衆取寵,每篇文章都成系列去系統的攻破一個知識點,每一個系列多是全網最佳/惟一。注重基本功修養,底層基礎決定上層建築。現有IDEA系列、Spring N多系列、Bean Validation系列、日期時間系列......關注免費獲取