maven 介绍
maven是一个构建工具,可以帮助我们管理jar包的依赖,当一个项目分功能分模块协同工作时,若导入了不同的jar包,可能会出现意想不到的问题,这种时候就可以使用maven来继承和聚合管理jar包的依赖。
继承
多个模块协同开发时,导入各自得jar包难免会出现版本不一致的问题,使用maven的父类,来统一管理jar包的依赖,还可以使用properties去进行统一的版本管理
依赖的范围
每个依赖可以通过scope设置依赖的影响范围,使用最多的三个:test、provided、compile
- test:仅在测试有效
- provided:在编译和测试有效
- compile:在编译、测试和打包有效
还有一些其它不常用的:import(import在单继承满足不了时使用)、runtime、system
依赖的传递
当A依赖B,B依赖C,若依赖范围是compile,那么A也依赖C(仅当依赖范围是compile的依赖,才能传递依赖)
依赖排除
在传递依赖的过程中,有些依赖是不希望去使用的时,可以使用依赖排除
<dependency>
<groupId>com.zsl.</groupId>
<artifactId>XXX</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
统一版本
如下:在父类 pom 中统一管理jar包版本
<properties>
<zsl.mybatis.version>3.4.6</zsl.mybatis.version>
<zsl.spring.version>5.1.9.RELEASE</zsl.spring.version>
<zsl.mybatis-spring.version>1.3.2</zsl.mybatis-spring.version>
<zsl.mysql-connector.version>5.1.38</zsl.mysql-connector.version>
<zsl.druid.version>1.1.10</zsl.druid.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>${zsl.servlet-api.version}</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${zsl.mybatis.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${zsl.mybatis-spring.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${zsl.mysql-connector.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${zsl.druid.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${zsl.spring.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${zsl.spring.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
聚合
将多个工程拆分为模块后,需要手动逐个安装到仓库后依赖才能够生效。修改源码后也需要逐个手动进行 clean 操作。而使用了聚合之后就可以批量进行 Maven 工程的安装、清理工作
在总的聚合工程中使用 modules/module 标签组合,指定模块工程的相对路径即可
这样不需要在多个模块逐步操作,在父工程中统一操作。如parent中clean,entity、mapper、web、service、util模块全部进行clean
<modules>
<module>../book-entity</module>
<module>../book-mapper</module>
<module>../book-web</module>
<module>../book-service</module>
<module>../book-util</module>
</modules>