Maven 父子工程的一些細節


 

Project,項目,也叫做工程。

 

父子工程中,子模塊會自動繼承父工程的資源、依賴,但子模塊之間是獨立的,不能直接訪問彼此中的資源、類。

就是說我們可以把多個子模塊都要用的資源、依賴提出來,放到父工程中,注意微服務的每個服務都是獨立的,不能這么干。

 


 

父子工程的依賴繼承問題

子模塊會繼承父工程的依賴,但並不是所有繼承下來的依賴都有效、還能在子模塊中使用。

作用域是provided、test的依賴,繼承下來都是無效的,需要在子模塊的pom.xml中重新導入。

 


 

 

使用其它子模塊中的類

有時候我們要使用本項目其它子模塊中的類,或者使用其它項目的某個模塊中的類。

常見的情況是:把某個模塊打包為jar,安裝到公司私服,供公司內部使用。

 

不能直接使用其它子模塊中的類,需要先把要使用的子模塊打包為jar,安裝到倉庫,然后在要用的子模塊的pom.xml中引入依賴。

比如我要在service子模塊中使用dao子模塊:

 

(1)對dao子模塊中的install雙擊,打包為jar,安裝到倉庫

 

 

(2)在service子模塊的pom.xml中導入依賴:

     <dependency>
            <groupId>org.example</groupId>
            <artifactId>dao</artifactId>
            <version>1.0</version>
        </dependency>

對應dao模塊的公司|組織名、模塊名、版本號。

 

 


 

 

父子工程的2種啟動方式

(1)通過Maven的tomcat插件啟動

在父工程的pom.xml中添加tomcat插件

    <plugin>
          <groupId>org.apache.tomcat.maven</groupId>
          <artifactId>tomcat7-maven-plugin</artifactId>
          <version>2.2</version>
          <!--配置tomcat的端口號、將工程映射到哪個路徑(域名后面的工程名)、uri編碼字符集-->
          <configuration>
            <port>8080</port>
            <path>/ssm</path>
            <uriEncoding>UTF-8</uriEncoding>
          </configuration>
        </plugin>

 

 

tomcat插件啟動方式一:

 如果沒有出現tomcat7,刷新一下、重新導入。

 

 

tomcat插件啟動方式二:

 

 

說明

  • 這2種方式都是通過Maven的tomcat插件來啟動,都需要在父工程的pom.xml中配置tomcat插件。
  • 其實真正部署到tomcat上的是web模塊,所以也可以在web模塊的pom.xml中配置tomcat插件,啟動該web模塊。
  • 如果要引用其他模塊中的類,都需要先install安裝到本地倉庫或私服,然后在pom.xml中添加該模塊的依賴。

 

 

 

(2)使用外置的tomcat來啟動

無需在pom.xml中配置tomcat插件。

 

 


 

 

jar包鎖定

公司往往要在父工程的pom.xml中統一項目的jar包版本,但如果在子模塊的pom.xml中導入了同名、不同版本的jar包,會覆蓋父工程傳遞的同名依賴。

為防止這種問題,需要在父工程的pom.xml中鎖定jar包版本。

  <!--jar包鎖定-->
  <dependencyManagement>
    <dependencies>
      <dependency></dependency>
      <dependency></dependency>
      <dependency></dependency>
    </dependencies>
  </dependencyManagement>

  <!--依賴-->
  <dependencies>
    <dependency></dependency>
    <dependency></dependency>
    <dependency></dependency>
  </dependencies>

就是把<dependencies>拷貝一下放到<dependencyManagement>中。鎖定之后,如果子模塊中出現同名的依賴,以父工程傳遞的依賴(鎖定的依賴)為准。

需要注意的是<dependencyManagement>只有鎖定jar包的功能,不會導入jar包。

 

 


 

 

統一管理jar包版本

  <!--統一管理jar包版本-->
  <properties>
    <!--元素名即key,隨意取但盡量見名知義,通過${key}來引用-->
    <mybatis.version>3.5.4</mybatis.version>
  </properties>

  <!--jar包鎖定-->
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>${mybatis.version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <!--依賴-->
  <dependencies>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>${mybatis.version}</version>
    </dependency>
  </dependencies>

 

把版本都寫在<properties>中,使用${ }引用即可,這樣維護起來方便。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM