日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Maven 基礎(chǔ)知識(一)工程結(jié)構(gòu)

 路人甲Java 2021-06-30

maven工程結(jié)構(gòu)分為繼承和集合,通過繼承可以讓多個子模塊共享配置在父模塊中的配置信息,通過集合可以讓我們在父模塊執(zhí)行命令時,遞歸的對子模塊進(jìn)行相同的處理。

下面以模塊com.mycompany.app:my-app:1

<project>
  <modelVersion>4.0.0</modelVersion>
 
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1</version>
</project>

和模塊com.mycompany.app:my-module:1為例來進(jìn)行說明

<project>
  <modelVersion>4.0.0</modelVersion>
 
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-module</artifactId>
  <version>1</version>
</project>

  1. 繼承,通過在子模塊中指定<parent>元素來實現(xiàn)

    1. 場景1:子模塊所在的目錄是父模塊的子目錄

      .
       |-- my-module
       |   `-- pom.xml
       `-- pom.xml
      
      
      • 其中my-module/pom.xmlcom.mycompany.app:my-module:1的POM,pom.xmlcom.mycompany.app:my-app:1的POM

      為了把my-app變成my-module的父模塊,可按如下修改my-module/pom.xml

      <project>
        <modelVersion>4.0.0</modelVersion>
       
        <parent>
          <groupId>com.mycompany.app</groupId>
          <artifactId>my-app</artifactId>
          <version>1</version>
        </parent>
       
        <artifactId>my-module</artifactId>
      </project>
      
      
      • 在子模塊中追加了<parent>元素
      • 去除了my-module/pom.xml中的<groupId><version>,默認(rèn)使用從父模塊繼承到的屬性值
    2. 場景2: 子模塊所在目錄不是父模塊的子目錄

       |-- my-module
       |   `-- pom.xml
       `-- parent
           `-- pom.xml
      
      
      • 其中parent/pom.xmlcom.mycompany.app:my-app:1的POM,這個例子也告訴我們工程目錄名parentartifactId的值可以不一樣,但在實際應(yīng)用中,我們一般會保持目錄名和artifactId一致,這里只是為了說明my-app是父模塊

      為了把my-app變成my-module的父模塊,可按如下修改my-module/pom.xml

      <project>
        <modelVersion>4.0.0</modelVersion>
       
        <parent>
          <groupId>com.mycompany.app</groupId>
          <artifactId>my-app</artifactId>
          <version>1</version>
          <relativePath>../parent/pom.xml</relativePath>
        </parent>
       
        <artifactId>my-module</artifactId>
      </project>
      
      
      • <parent>元素中追加<relativePath>,相對路徑的起始目錄是當(dāng)前子模塊的路徑
    3. 場景3: 父工程在鏡像倉庫中

      <project>
        <modelVersion>4.0.0</modelVersion>
       
        <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.3.2.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.example</groupId>
        <artifactId>my-module</artifactId>
        <version>0.0.1-SNAPSHOT</version>
      </project>
      
      

    通過繼承,子模塊可以從父模塊繼承到如下元素

    groupId  
    version
    description
    url
    inceptionYear
    organization
    licenses
    developers
    contributors
    mailingLists
    scm
    issueManagement
    ciManagement
    properties
    dependencyManagement
    dependencies
    repositories
    pluginRepositories
    build
    plugin executions with matching ids
    plugin configuration
    etc.
    reporting
    profiles
    
    
  2. 聚集,通過在父模塊中指定<modules>

    一個模塊設(shè)定到父模塊的<modules>后,當(dāng)在父模塊執(zhí)行maven命令時,將在所有子模塊中遞歸執(zhí)行

    通過以下兩步可以將子模塊聚集到父模塊中

    • 將父模塊pom.xml中的<packaging>屬性值設(shè)置成pom
    • 在父模塊中的<modules>元素中指定子模塊的路徑
    1. 場景1:子模塊所在的目錄是父模塊的子目錄

      .
       |-- my-module
       |   `-- pom.xml
       `-- pom.xml
      
      
      • 其中my-module/pom.xmlcom.mycompany.app:my-module:1的POM,pom.xmlcom.mycompany.app:my-app:1的POM

      為了把my-module聚集到my-app模塊下,可按如下修改my-app/pom.xml文件

      <project>
        <modelVersion>4.0.0</modelVersion>
       
        <groupId>com.mycompany.app</groupId>
        <artifactId>my-app</artifactId>
        <version>1</version>
        <packaging>pom</packaging>
       
        <modules>
          <module>my-module</module>
        </modules>
      </project>
      
      
      • 追加<packaging>pom</packaging>,默認(rèn)是jar
      • 追加<modules>,其中<module>中指定子模塊的目錄位置,是一個相對路徑,起始路徑是父模塊的目錄
    2. 場景2:子模塊所在的目錄不是父模塊的子目錄

      .
       |-- my-module
       |   `-- pom.xml
       `-- parent
           `-- pom.xml
      
      • 其中parent/pom.xmlcom.mycompany.app:my-app:1的POM

      通過相對路徑把把my-module聚集到my-app模塊下

      <project>
        <modelVersion>4.0.0</modelVersion>
       
        <groupId>com.mycompany.app</groupId>
        <artifactId>my-app</artifactId>
        <version>1</version>
        <packaging>pom</packaging>
       
        <modules>
          <module>../my-module</module>
        </modules>
      </project>
      
      
  3. 繼承 VS 聚集

    當(dāng)有多個maven工程,如果想實現(xiàn)所有工程共享一些配置信息,可以采用 繼承 的模式,把公共信息配置到一個工程里,再把其他的工程中的<parent>指向這個工程。

    如果想實現(xiàn)對一批maven工程,同時進(jìn)行編譯、發(fā)布等操作,可以采用 聚集 的模式,創(chuàng)建一個parent工程,把這一批工程都作為parent工程的<modules>,這樣我們對父工程進(jìn)行操作時,就可以遞歸的對所有module進(jìn)行處理。

    當(dāng)然我們也可以同時使用繼承 聚集,即在子模塊中指定<parent>,同時也在父模塊中指定<modules>

    按如下模塊路徑舉例:

    .
     |-- my-module
     |   `-- pom.xml
     `-- parent
         `-- pom.xml
    
    
    • my-module/pom.xmlcom.mycompany.app:my-module:1的POM
    • parent/pom.xmlcom.mycompany.app:my-app:1的POM

    此時,為了同時利用繼承和聚集,可做如下修改

    com.mycompany.app:my-app:1的POM

    <project>
      <modelVersion>4.0.0</modelVersion>
     
      <groupId>com.mycompany.app</groupId>
      <artifactId>my-app</artifactId>
      <version>1</version>
      <packaging>pom</packaging>
     
      <modules>
        <module>../my-module</module>
      </modules>
    </project>
    
    

    com.mycompany.app:my-module:1的POM

    <project>
      <modelVersion>4.0.0</modelVersion>
     
      <parent>
        <groupId>com.mycompany.app</groupId>
        <artifactId>my-app</artifactId>
        <version>1</version>
        <relativePath>../parent/pom.xml</relativePath>
      </parent>
     
      <artifactId>my-module</artifactId>
    </project>
    
    

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多