> 文章列表 > maven总结

maven总结

maven总结

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,那么就会自动引入一些依赖。

maven总结

2.依赖冲突的规则

1.依赖路径最短优先原则

2.pom文件中申明顺序优先

maven总结

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标签来改变依赖的作用范围。

maven总结

5.项目构建生命周期

三个大阶段

  • clean:清理工作
  • default:核心工作,例如编译,测试,打包,部署
  • site:产生报告,发布站点

完整的default

maven总结 其中标红的地方,是几个比较重要的周期,在Idea的Maven工具中也能体现出来 。

当我们在Idea中点击这几个生命周期时,Maven会自动将之前所有的生命周期都执行到,就类似于如果我18岁了,那么我肯定经历过8岁。

maven总结

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>

maven总结

8.模块继承

还是在多模块项目开发中,多个子模块可能会引入相同的依赖,但是他们有可能会各自使用不同的版本,版本问题,有可能会导致最后构建的项目出问题,所以我们需要一种机制,来约定子模块的相关配置,于是就有了模块继承

通过继承可以实现在子工程中沿用父工程中的配置

  1. 在子工程中声明其父工程坐标与对应的位置
  2. 在父工程中定义依赖管理
  3. 定义完成之后,子工程相关的依赖就无需定义版本号,会直接使用父工程的版本号
<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代表一个可选项

暂时不看了 ,感觉用的不多,提一下