zoukankan      html  css  js  c++  java
  • 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>中,使用${ }引用即可,这样维护起来方便。

  • 相关阅读:
    遭遇:“传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确” 错误
    JS控制form表单action去向
    easyui form 提交问题,纠结了很久,有点诡异
    easyui的tab加载页面中的form重复提交
    AJAX POST请求中参数以form data和request payload形式在servlet中的获取方式
    $.AJAX参数提交及后台获取方式
    多条件判断语句case
    条件判断语句if
    条件测试和捕获信号
    向脚本传递参数
  • 原文地址:https://www.cnblogs.com/chy18883701161/p/12297476.html
Copyright © 2011-2022 走看看