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>中,使用${ }引用即可,这样维护起来方便。
Maven 父子工程的一些细节的更多相关文章
- 构建Maven父子工程
IDEA构建maven父子工程: 1.打开IDEA,Create New Project 如图: 如果没有弹出新建界面,可以先 file-->Close Project 如图: 2.创建父 ...
- 在idea中创建maven父子工程,子工程无法导入父工程依赖的问题
创建maven父子工程时遇到一个问题,当子工程的名称前缀和父工程的名称一样时,子工程会出现一系列的问题.比如我的父工程名称是microservicecloud,子工程名称是microservicecl ...
- 如何使用jenkins部署maven父子工程
最近使用jenkins自动部署项目时遇到一个问题,如果部署单个的maven工程,没有什么问题, 但是在部署maven创建的父子工程,如果只从svn或者git上拉取子工程源码时,会报找不到父 工程pom ...
- Maven父子工程,子项目变灰,提示该项目已被移除出maven父工程
最近使用maven的父子工程结构搭建微服务架构时,不知道什么原因, 子工程总是被莫名移除出父工程,然后打包处的项目名变成了灰色, 重启该项目时会提示,“该子项目已被移除,是否删除该项目”,这个 当然不 ...
- maven 父子工程打包 并且上传linux服务器
先对父工程进行 mvn clean 再对子工程执行 install wagon:upload-single wagon:sshexec 使用wagon前提: 本地maven 的settings.xml ...
- Maven父子工程配置文件详解
项目骨架搭建成功之后. 因为父工程管理子工程.子工程相当于继承于子工程,所以子工程可以调用父工程里面的东西.那么就可以将jar包对应的配置文件书写到父工程的pom.xml文件中,注意:父工程的打包方式 ...
- Maven创建父子工程(简单、完整)
Eclipse创建Maven父子工程(书中有的叫聚合工程,因为看了网上很多教程,实际操作总会有这样那样的小问题,有时候包结构还不对,创建成功后索性就自己写一篇帮助小白,有不对请指教) 1 file-n ...
- SpringgBoot父子工程的创建
知识:SpringBoot父子工程创建 花开堪折直需折,莫待无花空折枝 开始之前,非常非常有必要了解一下关于以及的区别,这样才可以在进行创建maven父子工程种避免一些不必要的意外错误. depend ...
- IDEA中创建父子工程与maven打包Springboot聚合工程报错程序包不存在问题处理
公司新项目需使用java技术栈,便使用IDEA搭建了一个多SpringBoot项目的聚合工程,因为初次使用,遇到了很多问题,maven打包时各种报错,在网上查了好多终于解决了,为巩固记忆,特作此记录. ...
随机推荐
- 关于idea修改当前使用的git账户的问题
原文地址:https://www.cnblogs.com/xuxiaojian/p/8890656.html 1.问题描述: 由于前一段时间公司迁移git,就是将项目代码等迁移到另一个git服务器上, ...
- 学习 解决用户验证、单点登录、api访问控制的开源框架 的 十月 第一弹:
step one 去饭 源码 ps :https://identityserver.io/ 这个官网. ps: https://github.com/IdentityServer 这是 源码网
- windows10卸载虚拟机忘记按照步骤卸载的实际问题
好久没有写博客了,由于太多事情,工作需要用到虚拟机,结果,虚拟机出问题,,,怎么办???我的办法就是卸载了重新安装一个,结果呢?太心急没有按照不知操作,今天弄了一下午,终于弄好了... 错误原因,用了 ...
- swift开发度假计划app
用swift开发一个完整的度假地app,设计到布局.数据绑定.数据编辑.页面导航等:适合初学者: github:(git@github.com:Frankltf/ios-swift-app.git)
- GC原理---垃圾收集算法
垃圾收集算法 Mark-Sweep(标记-清除算法) 标记清除算法分为两个阶段,标记阶段和清除阶段.标记阶段任务是标记出所有需要回收的对象,清除阶段就是清除被标记对象的空间. 优缺点:实现简单,容易产 ...
- screen配置窗口显示
screen的下方不显示,可以复制如下的代码 cd /root && vim .screenrc 贴上如下内容 hardstatus on hardstatus alwayslastl ...
- CUDA学习(一)之使用GPU输出HelloWorld
最近在学习CUDA,编程入门第一步便是“HelloWorld”,主要代码如下: #include "cuda_runtime.h" #include "device_la ...
- RabbitMQ下载与安装
RabbitMQ下载与安装 先跟大家科普一下MQ和RabbitMQ MQ简介 MQ全称为Message Queue ,即消息队列 应用场景: 1.任务异步处理. 将不需要同步处理的并且耗时长的操作由消 ...
- Spring配置 bean
在 Spring 的 IOC 容器里配置 Bean <bean id="helloWorld" class="com.xiya.spring.beans.Hello ...
- Git的指令
一,访问本地Git 上一节我们已学会了如何注册GitHub和安装Git 现在先打开电脑终端或Git Bash,首先和Git打个招呼,输入Git 二.新建文件/进入文件夹 mkdir + 文件名 ...