maven
- maven
- 1.构建依赖
- 2.依赖冲突的规则
- 3.可选依赖和排除依赖
- 可选依赖
- 排除依赖
- 4.依赖范围
- 5.项目构建生命周期
- 6.插件
- 7.模块聚合
- 8.模块继承
- 9.属性(类似常量)
- (1) 自定义属性
- (2)直接调用内置属性
- 10.多个环境配置
maven
学习 一文带你搞定Maven全功能 笔记
1.构建依赖
<dependencies>
<!-- servlet包 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
</dependencies>
依赖传递: 依赖具有传递性,当我们引入了一个依赖的时候,就会自动引入该依赖引入的所有依赖,依次往下引入所有依赖。 比如我们引入了Druid数据库连接池的SpringBoot-Starter,那么就会自动引入一些依赖。
2.依赖冲突的规则
1.依赖路径最短优先原则
2.pom文件中申明顺序优先
3.可选依赖和排除依赖
可选依赖
maven的依赖关系是有传递性的。如:A–>B,B–>C。但有时候,项目A可能不是必需依赖C
我们只需要B就行了
<project>
...
<dependencies>
<!-- declare the dependency to be set as optional -->
<dependency>
<groupId>sample.ProjectB</groupId>
<artifactId>Project-B</artifactId>
<version>1.0</version>
<scope>compile</scope>
<optional>true</optional> <!-- value will be true or false only -->
</dependency>
</dependencies>
</project>
假设以上配置是项目A的配置,即:Project-A -> Project-B。在编译项目A时,是可以正常通过的。
如果有一个新的项目X依赖A,即:Project-X -> Project-A。此时项目X就不会依赖项目B了。
比如现在自己写mybatis,在mybatis中的我用到了很多不同的日志框架, 因此需要导入这些依赖来做兼容,是我们项目中并不一定会使用这些日志框架作为Mybatis的日志打印器,因此这些日志框架仅Mybatis内部做兼容需要导入使用,而我们可以选择不使用这些框架或是选择其中一个即可 。
可选,可选。就是在我们的项目中 我们用到了,但是用我们项目的人不一定用。
排除依赖
假设存在这样的依赖关系A->B,B->X,Y 且两个特性是互斥的关系,A无法同时使用两个特性,所以 A 需要排除 X,此时就可以在 A 中将间接依赖 X 排除。
<dependencies>
<dependency>
<groupId>net.biancheng.www</groupId>
<artifactId>B</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<!-- 设置排除 -->
<!-- 排除依赖必须基于直接依赖中的间接依赖设置为可以依赖为 false -->
<!-- 设置当前依赖中是否使用间接依赖 -->
<exclusion>
<!--设置具体排除-->
<groupId>net.biancheng.www</groupId>
<artifactId>X</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
排除依赖和可选依赖的区别:
可选依赖是依赖提供者设置的,比如我们引入了Durid,那么该选项由Durid开发者设置
排除依赖由依赖引入者设置,比如我们引入了Durid,那么我们可以设置该选项
排除依赖是控制当前项目是否使用其直接依赖传递下来的间接依赖;
可选依赖是控制当前项目的依赖是否向下传递;
4.依赖范围
依赖的jar默认情况可以在任何地方使用,可以通过scope标签来改变依赖的作用范围。
5.项目构建生命周期
三个大阶段
- clean:清理工作
- default:核心工作,例如编译,测试,打包,部署
- site:产生报告,发布站点
完整的default
其中标红的地方,是几个比较重要的周期,在Idea的Maven工具中也能体现出来 。
当我们在Idea中点击这几个生命周期时,Maven会自动将之前所有的生命周期都执行到,就类似于如果我18岁了,那么我肯定经历过8岁。
6.插件
plugins
什么是插件?
插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能
在对应的生命周期会通过插件完成对应的事件,通过使用Maven的生命周期,我们可以获得我们需要的功能,可能是打jar包,可能是安装到本地仓库,可能是部署到私服。
标签引入新的插件
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
eg_2:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<goals>
<goal>jar</goal>
</goals>
<phase>generate-test-resources</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
上述自定义插件的作用指的是在generate-test-resources生命周期执行打jar包的操作。
7.模块聚合
聚合用于快速构建Maven工程,一次性构建多个项目/模块。
<!--聚合的所有模块-->
<modules>
<module>ruoyi-admin</module>
<module>ruoyi-framework</module>
<module>ruoyi-system</module>
<module>ruoyi-quartz</module>
<module>ruoyi-generator</module>
<module>ruoyi-common</module>
</modules>
<!--打包类型定义为pom-->
<packaging>pom</packaging>
8.模块继承
还是在多模块项目开发中,多个子模块可能会引入相同的依赖,但是他们有可能会各自使用不同的版本,版本问题,有可能会导致最后构建的项目出问题,所以我们需要一种机制,来约定子模块的相关配置,于是就有了模块继承
通过继承可以实现在子工程中沿用父工程中的配置
- 在子工程中声明其父工程坐标与对应的位置
- 在父工程中定义依赖管理
- 定义完成之后,子工程相关的依赖就无需定义版本号,会直接使用父工程的版本号
<parent>
<artifactId>ruoyi</artifactId>
<groupId>com.ruoyi</groupId>
<version>3.8.1</version>
</parent>
<dependencyManagement>
<dependencies>
<!-- SpringBoot的依赖配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.5.8</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 阿里数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- SpringBoot集成mybatis框架 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring-boot.version}</version>
</dependency>
<!-- pagehelper 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pagehelper.boot.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
</dependency>
继承除了依赖版本号之外,还会继承一些其他资源
9.属性(类似常量)
在Maven中,对于有些依赖可能需要保证相同的版本,比如Spring相关依赖,那么我们就需要一个机制来保证这些依赖的版本都相同,我们可以使用Maven中的属性,类似编程语言的全局变量。
(1) 自定义属性
<properties>
<ruoyi.version>3.8.1</ruoyi.version>
</properties>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi</artifactId>
<version>${ruoyi.version}</version>
(2)直接调用内置属性
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi</artifactId>
<version>${ruoyi.version}</version>
10.多个环境配置
一个项目,开发环境、测试环境、生产环境的配置文件必然不同,那么Maven就需要进行多环境配置管理
Maven多环境对应Idea中Maven工具的Profiles
配置文件:通过配置文件配置,一个profile代表一个可选项
暂时不看了 ,感觉用的不多,提一下