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打包时各种报错,在网上查了好多终于解决了,为巩固记忆,特作此记录. ...
随机推荐
- 数据库及ORM之Mysql
1. 数据库介绍 1.1什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据.我们也可 ...
- code review工具之codebrag安装使用
code review之codebrag安装使用 1.说明 codebrag是一款审核代码的工具,安装部署很简单.现在网上有很多代码审核工具,收费的开源的一大堆,开源的比较好的是Facebook的ph ...
- 前端url参数中带有callback并产生错误
错误截图: 初步诊断是由于后端返回值的数据格式不正确造成的 解决方式: 1).接受在springmvc中接受callback参数 2).将对象转为Object 3).拼接callback方法,其中返回 ...
- kaggle实战之 bag of words meet bag of poopcorn
由于编辑器总是崩溃,我只能直接把代码贴上了. import numpy #first step import pandas as pd import numpy as np # Read data f ...
- asp.net core 2.2升到3.1遇到的问题小记
趁着武汉疫情,在家研究原来2.2的框架升级到3.1的问题,在过程中遇到不少坑,好在放假有的是时间,一个一个解决,现做个简要记录,供大家参考.推荐认真看这篇文章 [https://docs.micros ...
- 逆向番茄社区app的rsa加密方式
Parse RSA public and private key pair from string in Java 逆向某APP,发现其大部分配置文件都是加密的 .所以逆向算法并解密 RSA和AES密 ...
- non-local static 变量初始化顺序不确定,带来的问题
所谓static对象,其寿命从被构造出来直到程序结束为止,因此stack和heap-based对象都被排除.这种对象包括global对象.定义于namespace作用域内的对象,classes内.在函 ...
- Jenkins report 打开样式失败解决方案
1.临时解决方案(重启Jenkins失效):在系统管理->脚本命令行: 执行: System.setProperty("hudson.model.DirectoryBrowserSup ...
- Codeforces_734_D
http://codeforces.com/problemset/problem/734/D 保存最近的八个方向的点,判断即可. #include<iostream> #include&l ...
- 小白学 Python 数据分析(3):Pandas (二)数据结构 Series
在家为国家做贡献太无聊,不如跟我一起学点 Python 顺便问一下,你们都喜欢什么什么样的文章封面图,老用这一张感觉有点丑 人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析( ...