Maven 父子工程的一些細節

 

Project,項目,也叫作工程。web

 

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

就是說咱們能夠把多個子模塊都要用的資源、依賴提出來,放到父工程中,注意微服務的每一個服務都是獨立的,不能這麼幹。tomcat

 


 

父子工程的依賴繼承問題

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

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

 


 

 

使用其它子模塊中的類

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

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

 

不能直接使用其它子模塊中的類,須要先把要使用的子模塊打包爲jar,安裝到倉庫,而後在要用的子模塊的pom.xml中引入依賴。編碼

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

 

(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>中,使用${ }引用便可,這樣維護起來方便。

相關文章
相關標籤/搜索