IntelliJ IDEA使用模塊依賴關(guān)系

2018-10-11 15:06 更新

IntelliJ IDEA 模塊依賴關(guān)系

IntelliJ IDEA 模塊依賴是模塊使用的東西。

模塊依賴關(guān)系可能包括:

  • 一個(gè) SDK,如果在模塊依賴關(guān)系中存在,則被稱為模塊 SDK。
  • 庫:存檔(JAR)的集合以及具有類文件,源和文檔的目錄。
  • 屬于同一項(xiàng)目的其他模塊。

編譯或運(yùn)行代碼時(shí),使用模塊依賴關(guān)系來形成編譯器或 JVM 的類路徑。(如果有,本機(jī)庫位置將被添加到 java.library.path 而不是類路徑中。)

IntelliJ IDEA 管理模塊依賴關(guān)系

與使用模塊依賴關(guān)系相關(guān)的大部分任務(wù)都在“項(xiàng)目結(jié)構(gòu)”對話框(文件| 項(xiàng)目結(jié)構(gòu)(File | Project Structure))中執(zhí)行:選擇模塊,選擇感興趣的模塊,然后選擇依賴關(guān)系。

IntelliJ IDEA 管理模塊依賴關(guān)系


使用以下圖標(biāo)和上下文菜單命令:

  • (Alt+Insert)和 (Alt+Delete)來添加和刪除依賴關(guān)系。請參閱添加依賴關(guān)系。
  • (Alt+Up)和 (Alt+Down)來重新排序項(xiàng)目。(當(dāng)列表排序時(shí),不能對項(xiàng)目重新排序)
  •  編輯庫。
  • 導(dǎo)航(Navigate)(F4)切換到所選依賴關(guān)系的配置,以查看其設(shè)置和內(nèi)容。
  • 查找使用實(shí)例(Find Usages)(Alt+F7)以找出所選項(xiàng)目所用的模塊。
  • 移動(dòng)到項(xiàng)目庫,移動(dòng)到全局庫,將選定的模塊庫移動(dòng)到項(xiàng)目或全局級別。
  • 復(fù)制到模塊庫,以便在模塊級別創(chuàng)建所選項(xiàng)目或全局庫的副本。
IntelliJ IDEA 管理模塊依賴關(guān)系

添加依賴關(guān)系

在依賴關(guān)系列表的旁邊,點(diǎn)擊并選擇:

  • JAR 或目錄。 在打開的對話框中,選擇要添加到依賴關(guān)系的文件和文件夾。(對于每個(gè)選定的文件和文件夾,創(chuàng)建一個(gè)未命名的模塊庫。)
  • 庫。 在打開的對話框中,選擇一個(gè)或多個(gè)庫并單擊添加所選項(xiàng)。(您也可以創(chuàng)建一個(gè)新的庫:新建庫,然后將其添加到依賴關(guān)系:添加所選項(xiàng))。
  • 模塊依賴關(guān)系。 在打開的對話框中,選擇要添加到依賴關(guān)系的模塊。

另請參閱,將全局或項(xiàng)目庫添加??到模塊依賴關(guān)系。

依賴關(guān)系列表進(jìn)行排序

通過單擊標(biāo)題行中的單元格, 可以按它們的名稱 (中心列) 和作用域?qū)σ蕾図?xiàng)進(jìn)行排序。

  • 首次點(diǎn)擊。該列表按升序順序按相應(yīng)列排序。排序標(biāo)記出現(xiàn)在單元格中:。
  • 第二次點(diǎn)擊。列表更改為降序;排序標(biāo)記更改為:
  • 第三次點(diǎn)擊?;謴?fù)初始未排序狀態(tài)。

在對列表進(jìn)行排序時(shí),不能更改依賴關(guān)系的順序。

依賴關(guān)系的順序

模塊依賴關(guān)系按照它們在相應(yīng)列表中的顯示順序進(jìn)行處理。

在編譯時(shí),列表中的項(xiàng)目順序定義了編譯器(javac)查找類來解析相應(yīng)引用的順序。在運(yùn)行時(shí),此列表定義 JVM 搜索要加載的類的順序。

使用庫修補(bǔ)程序。如果要對某些庫使用修補(bǔ)程序,則應(yīng)將這些修補(bǔ)程序放在主庫之前的列表中。否則,新版本的類(包含在修補(bǔ)程序中)將被忽略。

類路徑,bootclasspath 和 JDK 位置。 對于編譯,列表中與模塊 JDK 相關(guān)的項(xiàng)的位置可能很重要:

  • 在 JDK 之后出現(xiàn)的項(xiàng)目將轉(zhuǎn)換為模塊類路徑項(xiàng)。你通常處理的大多數(shù)庫都應(yīng)該去那里。
  • 在 JDK 之前出現(xiàn)的項(xiàng)目對應(yīng)于模塊 bootclasspath 條目。為了使編譯成功,必須在模塊 bootclasspath 中包含某些庫 (例如, 與 JDK 本身及其擴(kuò)展有關(guān)的程序)。所以,這樣的庫必須出現(xiàn)在 JDK 之前的列表中。但是,在非常有限的特殊情況下,可能需要使用這些庫。因此,對于大多數(shù)模塊,JDK 將(并且應(yīng)該)成為依賴關(guān)系列表中的第一個(gè)項(xiàng)目。

控制源和測試的編譯和運(yùn)行時(shí)類路徑

您可以在運(yùn)行測試時(shí)指定是否應(yīng)該包含依賴項(xiàng) classpath 1)編譯模塊來源 2)編譯模塊測試源 3)運(yùn)行編譯源4)。您可以通過為依賴關(guān)系范圍("依賴關(guān)系" 選項(xiàng)卡上的 "范圍" 列)選擇以下選項(xiàng)之一來執(zhí)行此操作:

  • 編譯。依賴關(guān)系包含在編譯和運(yùn)行階段的源和測試源的類路徑中。
  • 測試。依賴關(guān)系僅在編譯和運(yùn)行測試源時(shí)才包含在類路徑中。
  • 運(yùn)行。只有運(yùn)行源代碼和測試源時(shí),依賴關(guān)系才包含在類路徑中。
  • 提供。對于您的源,依賴關(guān)系僅在編譯階段包含在類路徑中。當(dāng)有容器時(shí)(例如 Web 容器),它在運(yùn)行時(shí)提供相應(yīng)的依賴關(guān)系。對于您的測試源,依賴關(guān)系在構(gòu)建和運(yùn)行階段都包含在類路徑中。正常情況下,應(yīng)用程序服務(wù)器庫包含在提供范圍的依賴關(guān)系列表中。

下表總結(jié)了可能的依賴關(guān)系范圍的類路徑信息。

范圍
來源,
編譯時(shí)
來源,
運(yùn)行時(shí)
測試,
編譯時(shí)
測試,
運(yùn)行時(shí)
編譯++++
測試--++
運(yùn)行-+-+
提供+-++

處理測試源的依賴關(guān)系。 請注意,IntelliJ IDEA 與其他構(gòu)建工具(例如 Gradle 和 Maven)的不同之處在于處理測試源的依賴關(guān)系。

如果您的模塊(例如,模塊 A)取決于另一個(gè)模塊(模塊 B),IntelliJ IDEA 假設(shè) A 中的測試源不僅取決于 B 中的源,還取決于其測試源。因此,B 的測試源也包含在相應(yīng)的類路徑中。

將依賴關(guān)系導(dǎo)出到其他模塊的編譯類路徑

您有一個(gè)模塊(模塊 A)取決于另一個(gè)模塊(模塊 B)。

在運(yùn)行時(shí),B 的所有依賴項(xiàng)都包含在 A 的類路徑中。

對于 A 的編譯類路徑,對于 B 的每個(gè)依賴項(xiàng)有兩個(gè)選擇。(為了說明,我們假設(shè) B 在依賴關(guān)系中有一個(gè)庫 L)

  • L 包含在 A 的類路徑中,如果在 B 的依賴項(xiàng)中,它具有“導(dǎo)出”選項(xiàng)。
  • 如果“導(dǎo)出”選項(xiàng)關(guān)閉,L不會包含在 A 的類路徑中。

若要打開和關(guān)閉導(dǎo)出選項(xiàng),請使用 "依賴關(guān)系" 選項(xiàng)卡上 "導(dǎo)出" 列中的復(fù)選框。

請注意,導(dǎo)出時(shí)依賴關(guān)系范圍可能會更改。我們假設(shè):

  • A 對 B 的依賴的范圍是編譯。
  • B 對 L 的依賴的范圍是測試。

如果 L 具有導(dǎo)出選項(xiàng),則 A 對 L 的依賴關(guān)系的范圍將有效地被測試。

下表列出了這一情況以及其他一些有趣的實(shí)際案例。

A 對 B 依賴,
指定范圍
B 對 L 依賴,
指定范圍
A 對 L 依賴,
產(chǎn)生范圍
編譯編譯編譯
編譯測試測試
測試編譯測試
測試測試測試


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號