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>中,使用${ }引用即可,这样维护起来方便。

Maven 父子工程的一些细节的更多相关文章

  1. 构建Maven父子工程

    IDEA构建maven父子工程:  1.打开IDEA,Create New Project 如图:   如果没有弹出新建界面,可以先 file-->Close Project 如图: 2.创建父 ...

  2. 在idea中创建maven父子工程,子工程无法导入父工程依赖的问题

    创建maven父子工程时遇到一个问题,当子工程的名称前缀和父工程的名称一样时,子工程会出现一系列的问题.比如我的父工程名称是microservicecloud,子工程名称是microservicecl ...

  3. 如何使用jenkins部署maven父子工程

    最近使用jenkins自动部署项目时遇到一个问题,如果部署单个的maven工程,没有什么问题, 但是在部署maven创建的父子工程,如果只从svn或者git上拉取子工程源码时,会报找不到父 工程pom ...

  4. Maven父子工程,子项目变灰,提示该项目已被移除出maven父工程

    最近使用maven的父子工程结构搭建微服务架构时,不知道什么原因, 子工程总是被莫名移除出父工程,然后打包处的项目名变成了灰色, 重启该项目时会提示,“该子项目已被移除,是否删除该项目”,这个 当然不 ...

  5. maven 父子工程打包 并且上传linux服务器

    先对父工程进行 mvn clean 再对子工程执行 install wagon:upload-single wagon:sshexec 使用wagon前提: 本地maven 的settings.xml ...

  6. Maven父子工程配置文件详解

    项目骨架搭建成功之后. 因为父工程管理子工程.子工程相当于继承于子工程,所以子工程可以调用父工程里面的东西.那么就可以将jar包对应的配置文件书写到父工程的pom.xml文件中,注意:父工程的打包方式 ...

  7. Maven创建父子工程(简单、完整)

    Eclipse创建Maven父子工程(书中有的叫聚合工程,因为看了网上很多教程,实际操作总会有这样那样的小问题,有时候包结构还不对,创建成功后索性就自己写一篇帮助小白,有不对请指教) 1 file-n ...

  8. SpringgBoot父子工程的创建

    知识:SpringBoot父子工程创建 花开堪折直需折,莫待无花空折枝 开始之前,非常非常有必要了解一下关于以及的区别,这样才可以在进行创建maven父子工程种避免一些不必要的意外错误. depend ...

  9. IDEA中创建父子工程与maven打包Springboot聚合工程报错程序包不存在问题处理

    公司新项目需使用java技术栈,便使用IDEA搭建了一个多SpringBoot项目的聚合工程,因为初次使用,遇到了很多问题,maven打包时各种报错,在网上查了好多终于解决了,为巩固记忆,特作此记录. ...

随机推荐

  1. beta版本发布说明与总结

    1.发布说明: 软件介绍: deta版本的发布最终是一个可安装使用的窗体程序,已经由Alpha版本的应用解决方案完成到一个程序: deta版本解决了Alpha版本遗留的软件技术方面错误问题,以及针对有 ...

  2. Java Swing图形界面开发

    本文转自xietansheng的CSDN博客内容,这是自己见过的最通俗易懂.最适合快速上手做Java GUI开发的教程了,这里整合一下作为自己以后复习的笔记: 原文地址:https://blog.cs ...

  3. Shell字符串比较相等、不相等方法小结【转】

    #!/bin/sh #测试各种字符串比较操作. #shell中对变量的值添加单引号,爽引号和不添加的区别:对类型来说是无关的,即不是添加了引号就变成了字符串类型, #单引号不对相关量进行替换,如不对$ ...

  4. NOde.js的安装和简介

    1.nodejs的安装 1.1 检测nodejs的版本 node -v (version:版本) 1.2 path配置nodejs 的环境变量(当前版本都是自动安装配置环境变量)指令: path 1. ...

  5. linux下redis的部署

    https://www.cnblogs.com/wangchunniu1314/p/6339416.html https://www.linuxidc.com/Linux/2017-09/146894 ...

  6. 工具之cut

    转自http://www.cnblogs.com/dong008259/archive/2011/12/09/2282679.html cut:正如其名就是“剪”,和sed一样,一行为单位,对数据进行 ...

  7. php--->自己封装的简易版mvc框架

    最近根据自己的理解,封装了一个自己的框架,来重新系统化梳理自己对mvc框架的理解:后续会陆续添加各种新的功能. 欢迎指点交流. GitHub:https://github.com/Frankltf/m ...

  8. C语言博客作业6

    本周作业头 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 作业链接 我在这个课程的目标是 熟悉多分支结构.字符型数据类型和逻辑运算符 这个作业在那个具体方面帮助我实现目标 完成pta作 ...

  9. react中 如何使用图片

    //render 第一种方法:先const一个对象,把需要应用图片的dom上的style写入对象中, 然后在return()中使用style关键字赋值为预先定义的那个style对象 const bgG ...

  10. kettle安装部署基本操作及实操文档

    一.kettle是什么? Kettle,简称ETL(Extract-Transform-Load的缩写,即数据抽取.转换.装载的过程),是一款国外开源的ETL工具,纯Java编写,可以在Window. ...