maven总结

maven

学习 一文带你搞定Maven全功能 笔记

1.构建依赖

<dependencies>	
	<!-- servlet包 -->
     <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
     </dependency>
</dependencies>

依赖传递: 依赖具有传递性,当我们引入了一个依赖的时候,就会自动引入该依赖引入的所有依赖,依次往下引入所有依赖。 比如我们引入了Druid数据库连接池的SpringBoot-Starter,那么就会自动引入一些依赖。

img

2.依赖冲突的规则

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

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

img

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

img

5.项目构建生命周期

三个大阶段

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

完整的default

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

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

img

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>

img

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代表一个可选项

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值