簡體   English   中英

Maven包名稱包含多個模塊

[英]Maven package names with multiple modules

我正在努力學習更好地理解Maven的用法。 我有一個關於使用多個模塊的包名稱的正確方法的問題。

我將用一個例子來解釋我的問題。

我們有以下項目。

project
    project-api             Interfaces (implemented by the modules)
    project-core            Logic
    project-persistence     Data (models, repository etc)
    project-utils           Utilities (hashing, calculating etc)
    project-gui             Graphical User Interface
    project-cli             Command Line Interface
    project-dist            Distribution (generate the JAR's together)

有以下課程。

project-api
    Repository              Interface

project-core
    AbstractRepository      Abstract class (implements Repository)
    Core                    Class

project-persistence
    SampleRepository        Class (extends AbstractRepository)
    Sample                  Class (model)

project-utils
    Calculator              Class

project-gui
    Demo                    Class (main)

現在,當我們有這些東西時,我們將創建以下Demo類。

public class Demo() {

    public static void main(String[] args) {
        Core core = new Core();
        core.start();

        Repository sampleRepository = new SampleRepository();
        Sample sample = sampleRepository.get();

        Calculator.calc(sample);
    }

}

我們還需要導入包。 您應該在項目中使用哪個選項,或者如果選項不聽,那么哪種選擇是正確的?

選項1

將所有模塊包命名為與模塊-name:com.company.project.api相同的模塊

package com.company.project.gui

import com.company.project.api.persistence.repository.Repository;
import com.company.project.core.Core;
import com.company.project.persistence.repository.SampleRepository;
import com.company.project.persistence.models.Sample;
import com.company.project.utils.Calculator;

選項2

將API模塊包命名為與項目根名稱相同:com.company.project

package com.company.project.gui

import com.company.project.persistence.repository.Repository;
import com.company.project.core.Core;
import com.company.project.persistence.repository.SampleRepository;
import com.company.project.persistence.models.Sample;
import com.company.project.utils.Calculator;

選項3

將所有模塊包命名為與項目根包名稱相同的名稱:com.company.project

package com.company.project

import com.company.project.repository.Repository;
import com.company.project.Core;
import com.company.project.repository.SampleRepository;
import com.company.project.models.Sample;
import com.company.project.Calculator;

歡迎所有反饋,建議等。 先感謝您!

很好,您已經考慮了不同的選項,因為模塊命名沒有事實上的標准; 這是個人喜好的問題。 只要你保持一致並保持你的模塊名稱簡潔,並遵循groupID和artifactID的Maven 命名約定 ,你就可以了。

無論如何,我認為#1是最好的選擇。 通常,嘗試在Java 之間繪制並行,Maven groupIDartifactID是一種很好的方法。

通常我首先假設所有內容都以“類”名稱形式從項目父項開始。

這是因為我認為具有projectname_前綴的模塊是用於開發/構建和項目組織相關目的的多模塊的單個模塊。 本質上意味着它在項目之外並不是非常有用,它的“API”根本不是一個受人尊敬的API。 現在,它可能會變得更加結構化,但它並不像那樣開始。 因此,我不假設它有一個真正的java包代碼層次結構,當一個尚未形成時。

話雖如此,假設我的多模塊約定如下:

  • 項目名稱-POM
    • 項目名稱父-POM
    • 項目名稱核心
    • 項目名稱,應用程序

所有這些都將使用根com.example.projectname ,至少對於每個開始的地方,盡管有些可能有java子包。

現在隨着項目的發展,我最終可能會創建一個應該是模塊主包的子包。 隨着開發工作的繼續,可能很清楚代碼結構應該演變成什么。 那時項目可能是:

  • 項目名稱-POM:
    • 項目名稱父-POM
    • 項目名稱-LIB-POM
      • 項目名稱-LIB-父POM
      • projectname-lib-core: com.example.projectname.lib
      • projectname-lib-extra: com.example.projectname.lib.extras
    • projectname-app: com.example.projectname.app

因此,當事情剛剛開始並非常平坦時,我從選項3開始,如果/當模塊開始實際反映底層的Java包代碼層次結構時,則從選項1結束。

現在假設你有一個深思熟慮的java包代碼hiarchy,那么匹配maven模塊是理想的,但是這需要更多的工作,如果你在事情已經解決之前做到這一點最終會比完全平坦更糟糕。 良好的等級制度勝過沒有等級制度,但沒有等級制度勝過壞的制度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM