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官方文档》5分钟开始Maven
- Maven学习笔记-父pom和子pom
- Maven创建多模块项目(包括依赖版本号的统一更新)
- Maven导入依赖时一直resolving maven dependencies很慢,如何解决
- IDEA+Maven+web项目
- maven项目创建3 (依赖版本冲突)
- maven test 运行 指定类或方法 打包 mvn clean assembly:assembly
- maven可选依赖(Optional Dependencies)和依赖排除(Dependency Exclusions)
- 使用bat批处理命令打包maven项目
- Maven-003-私人定制 maven archetype
- pom中的maven依赖报错,有一些拉取不了
- mvn编译时绕过本地jar去maven仓库下载问题
- maven tomcat插件上传项目到tomcat服务器报错SEVERE: One or more listeners failed to start.
- Maven实战——有用Nexus创建私服(下)
- 【MAVEN】项目管理插件maven-plugins
- centos+Jenkins+maven+gradle+分布式scp+无密码登录
- 【Maven】使用插件拷贝jar包到指定目录
- maven学习笔记五(仓库搭建,私服配置)
- Spring如何实现IoC( IDEA创建一个maven项目实现IoC)