IDEA Project 和 Module 介紹

2022-04-27 10:37 更新

這兩個概念是 IntelliJ IDEA 的必懂知識點之一,請務(wù)必要學(xué)會。

如果你是 Eclipse 用戶,并且已經(jīng)看了上面給的鏈接,那 IntelliJ IDEA 首先告訴你一個非常重要的事情:IntelliJ IDEA 沒有類似 Eclipse 工作空間(?workspace?)的概念的。很多從 Eclipse 轉(zhuǎn)過來的人總是下意識地要再同一個窗口管理 n 個項目,這在 IntelliJ IDEA 是無法得到。IntelliJ IDEA 提供的體驗是:一個 Project 打開一個 Window 窗口。

對于 Project,IntelliJ IDEA 是這樣解釋的:

  • Whatever you do in IntelliJ IDEA, you do that in the context of a project. A project is an organizational unit that represents a complete software solution. It serves as a basis for coding assistance, bulk refactoring, coding style consistency, etc.
  • Your finished product may be decomposed into a series of discrete, isolated modules, but it's a project definition that brings them together and ties them into a greater whole.
  • Projects don't themselves contain development artifacts such as source code, build scripts, or documentation. They are the highest level of organization in the IDE, and they define project-wide settings as well as collections of what IntelliJ IDEA refers to as modules and libraries. 
  • 20170630 更新新地址:https://www.jetbrains.com/help/idea/about-projects.html
  • 對于 Module,IntelliJ IDEA 是這樣解釋的:

  • A module is a discrete unit of functionality which you can compile, run, test and debug independently.
  • Modules contain everything that is required for their specific tasks: source code, build scripts, unit tests, deployment descriptors, and documentation. However, modules exist and are functional only in the context of a project.
  • Configuration information for a module is stored in a .iml module file. By default, such a file is located in the module's content root folder.Development teams, normally, share the .iml module files through version control.
  • 20170630 更新新地址:https://www.jetbrains.com/help/idea/about-modules.html?search=About
  • 通過上面的介紹我們知道,在 IntelliJ IDEA 中 ?Project ?是最頂級的級別,次級別是 ?Module?。一個 ?Project ?可以有多個 ?Module?。目前主流的大型項目結(jié)構(gòu)都是類似這種多 ?Module ?結(jié)構(gòu),這類項目一般是這樣劃分的,比如:?core Module?、?web Module?、?plugin Module?、?solr Module? 等等,模塊之間彼此可以相互依賴。通過這些 ?Module? 的命名也可以看出,他們之間應(yīng)該都是處于同一個項目業(yè)務(wù)情況下的模塊,彼此之間是有不可分割的業(yè)務(wù)關(guān)系的。

    所以我們現(xiàn)在總結(jié):一個 ?Project? 是由一個或多個 ?Module? 組成,模塊之間盡量是處在同一個項目業(yè)務(wù)的的情況下,彼此之間互相依賴關(guān)聯(lián)。這里用的是 盡量,因為 IntelliJ IDEA 的 ?Project ?是一個沒有具備任何編碼設(shè)置、構(gòu)建等開發(fā)功能的,主要起到一個項目定義、范圍約束、規(guī)范等類型的效果,也許我們可以簡單地理解為就是一個單純的目錄,只是這個目錄命名上必須有其代表性的意義。

    下面我們以著名的 ?spring-framework? 項目為例介紹多 ?Module ?的結(jié)構(gòu)的:

    • 項目主頁:https://github.com/spring-projects/spring-framework
    • 該項目的 ?Project ?命名是:spring-?framework?。該目錄主要作用為各個 ?Module? 的頂層目錄進行約束,告訴協(xié)同者,這個目錄下都是 ?spring-framework? 相關(guān)的,我絕不會放 Android 相關(guān)源碼、文檔、文件在上面的。該目錄并不是以一個實際性的目錄來體現(xiàn)的,所以你訪問主頁是看不到的,但是當(dāng)你 ?checkout? 的時候,你必須為這個項目命名,至于命名默認就是 ?spring-framework?。
    • 該 ?Project? 下有二十來個 ?Module?,各個 ?Module ?的命名也是有含義的,比如:?spring-core?、?spring-jdbc?、?spring-jms?、?spring-orm?、?spring-web?、?spring-webmvc? 等等,我們通過這些命名也能清楚地知道他們要表達的含義,這些 ?Module ?下也都各自有 ?src? 編碼目錄,可以自行編碼和構(gòu)建。

    Project 和 Module 介紹

    • 相比較于多 ?Module ?項目,小項目就無需搞得這么復(fù)雜。只有一個 ?Module ?的結(jié)構(gòu) IntelliJ IDEA 也是支持的,并且 IntelliJ IDEA 創(chuàng)建項目的時候,默認就是單 ?Module ?的結(jié)構(gòu)的。
    • 如上圖 Gif 圖演示,在輸入 ?Project name ?的時候,?Module name? 和 ?Module file Location ?自動進行改變,同時 ?Project location? 和 ?Module file Location? 完全一樣,這也就表示,?Project ?目錄和 ?Module ? 目錄是同一個,所以此時 ?Project ?目錄下就會有 ?src? 目錄,但是我們應(yīng)該明白其本質(zhì)還是 ?Module ?的目錄。

    關(guān)于 IntelliJ IDEA 的 ?Project ?和 ?Module? 終于解釋清楚了,但是由于 IntelliJ IDEA 官網(wǎng)上又有一段話對此解釋得不夠好,特別是對 Eclipse 用戶來講:https://www.jetbrains.com/idea/help/eclipse-faq.html,其中有這樣兩句話:

    • An Eclipse workspace is similar to a project in IntelliJ IDEA
    • An Eclipse project maps to a module in IntelliJ IDEA

    你可以把 IntelliJ IDEA 的 ?Project ?當(dāng)做 ?workspace ?使用,IntelliJ IDEA 也是支持的,但是就像我們前面解釋的那么那么多,這樣是非常不符合其初衷的,所以請別把這段話當(dāng)做教義去學(xué)習(xí)。對此 zeroturnaround 的大牛也有針對此進行了說明:https://www.jrebel.com/blog/intellij-idea-tutorial


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

    掃描二維碼

    下載編程獅App

    公眾號
    微信公眾號

    編程獅公眾號