Maven核心概念

尚硅谷课件

一、Maven的下载与安装

1.)maven官网:maven官网

2.)点击下载:

在这里插入图片描述

3.)一些配置

在这里插入图片描述

① 配置本地仓库

在这里插入图片描述

② 配置阿里云镜像

在这里插入图片描述

	<mirror>
		<id>nexus-aliyun</id>
		<mirrorOf>central</mirrorOf>
		<name>Nexus aliyun</name>
		<url>http://maven.aliyun.com/nexus/content/groups/public</url>
	</mirror>

③ 指定默认jdk版本为1.8

	<profile>
	  <id>jdk-1.8</id>
	  <activation>
		<activeByDefault>true</activeByDefault>
		<jdk>1.8</jdk>
	  </activation>
	  <properties>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
		<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
	  </properties>
	</profile>

④ 环境变量配置

Maven 是一个用 Java 语言开发的程序,它必须基于 JDK 来运行,需要通过 JAVA_HOME 来找到 JDK 的安装位置。

配置 MAVEN_HOME
在这里插入图片描述
在这里插入图片描述
配置PATH
在这里插入图片描述

⑤ 验证maven是否正确安装

mvn -v

二、Maven的核心概念

1.)Maven中的坐标

groupId:公司或组织的 id

artifactId:一个项目或者是项目中的一个模块的 id

version:版本号
在这里插入图片描述

2.)使用命令行操作

①使用命令行生成Maven工程(java项目)

mvn archetype:generate 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

②执行Maven的构建命令

运行 Maven 中和构建操作相关的命令时,必须进入到 pom.xml 所在的目录。

1.清理操作:mvn clean
2.主程序编译:mvn compile
3.测试程序编译:mvn test-compile

主体程序编译结果存放的目录:target/classes

测试程序编译结果存放的目录:target/test-classes
在这里插入图片描述
在这里插入图片描述

4.测试操作 mvn test

测试的报告存放的目录:target/surefire-reports

5.打包操作 mvn package

打包的结果——jar 包,存放的目录:target
在这里插入图片描述

6.安装操作 mvn install

安装操作即将当前项目安装到本地仓库当中

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

③ 使用命令行生成maven工程(web项目)

mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4

生成的web工程的目录结构
在这里插入图片描述

④让web工程依赖java工程

明确一个意识:从来只有 Web 工程依赖 Java 工程,没有反过来 Java 工程依赖 Web 工程。本质上来说,Web 工程依赖的 Java 工程其实就是 Web 工程里导入的 jar 包。最终 Java 工程会变成 jar 包,放在 Web 工程的 WEB-INF/lib 目录下
在这里插入图片描述

详细描述

⑤打印出已解决依赖项的详细信息。指定可选参数classifier=sources,将尝试分析下载对应的依赖的源代码。

 mvn dependency:resolve -Dclassifier=sources

3.)约定的目录结构(java项目)

在这里插入图片描述

4.)测试依赖的范围

在这里插入图片描述

标签的可选值:compile/test/provided/system/runtime/import

在这里插入图片描述

在这里插入图片描述
provided:服务器上已经有了这个依赖,不用再重复提供。如果重复提供,可能会发生版本冲突。/
详细描述

import
在这里插入图片描述

maven依赖范围之import
在这里插入图片描述

system
在这里插入图片描述
runtime
在这里插入图片描述

5.)测试依赖的传递性

A 依赖 B,B 依赖 C,那么在 A 没有配置对 C 的依赖的情况下,A 里面能不能直接使用 C?
在这里插入图片描述

如果B在依赖C时,scope属性为compile时,依赖是可以传递的,即A不用在pom文件中显示的引入依赖C,就可以直接用C

如果B在依赖C时,scope属性为test、provided时,依赖是不可以传递的

6.)依赖的排除(阻断依赖的传递)

在这里插入图片描述

7.)继承

在父工程中统一管理项目中的依赖信息,具体来说是管理依赖信息的版本。

1.创建父工程和子工程

①创建父工程:maven003-parent
②修改父工程的pom文件中的打包方式:
在这里插入图片描述

③在父工程的根目录下,创建三个子项目
在这里插入图片描述
在这里插入图片描述
④查看结果
父工程的pom文件:
在这里插入图片描述
子工程的pom文件
在这里插入图片描述

2.在父工程管理依赖版本

只需要在父工程的pom文件,指定依赖的版本
在这里插入图片描述

子工程如果想要用某个依赖,也必须在子工程的pom文件下引入依赖,但不用指定版本
在这里插入图片描述

小技巧:

在这里插入图片描述

8.)生命周期

为了让构建过程自动化完成,Maven 设定了三个生命周期,生命周期中的每一个环节对应构建过程中的一个操作。
在这里插入图片描述

特点:
1.前面三个生命周期彼此是独立的。
2.在任何一个生命周期内部,执行任何一个具体环节的操作,都是从本周期最初的位置开始执行,直到指定的地方。(本节记住这句话就行了,其他的都不需要记)

9.)插件和目标

插件的作用:
Maven 的核心程序仅仅负责宏观调度,不做具体工作。具体工作都是由 Maven 插件完成的。例如:编译就是由 maven-compiler-plugin-3.1.jar 插件来执行的

目标:
一个插件可以对应多个目标,而每一个目标都和生命周期中的某一个环节对应
Default 生命周期中有 compile 和 test-compile 两个和编译相关的环节,这两个环节对应 compile 和 test-compile 两个目标,而这两个目标都是由 maven-compiler-plugin-3.1.jar 插件来执行的。

在这里插入图片描述

10.)仓库

在这里插入图片描述

三、使用Idea创建maven工程

创建java、web项目的详细步骤

1.) 在idea中配置Maven

每次新建project就必须设置以下内容,但是新建module就不用。

idea中有内置的maven,但是这个不太方便,我们用自己解压好的maven

在这里插入图片描述

2.)在idea中执行mvn命令的三种方式

第一种:
在这里插入图片描述
第二种:
在这里插入图片描述
第三种:
在这里插入图片描述

四、POM的深入与强化

Maven不仅仅可以用于构建管理和依赖管理他还可以进行项目管理

1.)POM的四个层次

①超级POM:

所以我们自己的 POM 即使没有明确指定一个父工程(父 POM),其实也默认继承了超级 POM。就好比一个 Java 类默认继承了 Object 类

②父POM:
在这里插入图片描述

③当前POM:
④有效POM:

有效 POM 英文翻译为 effective POM,它的概念是这样的——在 POM 的继承关系中,子 POM 可以覆盖父 POM 中的配置;如果子 POM 没有覆盖,那么父 POM 中的配置将会被继承。按照这个规则,继承关系中的所有 POM 叠加到一起,就得到了一个最终生效的 POM。显然 Maven 实际运行过程中,执行构建操作就是按照这个最终生效的 POM 来运行的。这个最终生效的 POM 就是有效 POM,英文叫effective POM

查看当前项目的有效pom:

mvn help:effective-pom

2.)属性的声明和引用

在这里插入图片描述
使用mvn help:evalueate查看属性值:
①查看系统属性:
在这里插入图片描述
②查看系统环境变量
在这里插入图片描述
③访问当前项目中pom文件中的属性:

查看properties标签下的属性值
在这里插入图片描述
查看其他标签下的属性值:
在这里插入图片描述
在这里插入图片描述
④查看maven的settings的全局配置:
在这里插入图片描述

3.)build标签

build标签用来控制项目的构建过程。

build标签是由 约定的目录结构、备用插件管理、生命周期插件管理这三大部分组成

1.)约定的目录结构:通过这个我们可以指定相应的资源所存放的目录

在这里插入图片描述

2.)备用插件管理

在这里插入图片描述

3.)生命周期插件

在这里插入图片描述

4.)典型应用

①指定JDK版本
方法一、

<!-- build 标签:意思是告诉 Maven,你的构建行为,我要开始定制了! -->
<build>
    <!-- plugins 标签:Maven 你给我听好了,你给我构建的时候要用到这些插件! -->
    <plugins>
        <!-- plugin 标签:这是我要指定的一个具体的插件 -->
        <plugin>
            <!-- 插件的坐标。此处引用的 maven-compiler-plugin 插件不是第三方的,是一个 Maven 自带的插件。 -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            
            <!-- configuration 标签:配置 maven-compiler-plugin 插件 -->
            <configuration>
                <!-- 具体配置信息会因为插件不同、需求不同而有所差异 -->
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

方法二、
在这里插入图片描述

②springboot定制化打包

很显然 spring-boot-maven-plugin 并不是 Maven 自带的插件,而是 SpringBoot 提供的,用来改变 Maven 默认的构建行为。具体来说是改变打包的行为。默认情况下 Maven 调用 maven-jar-plugin 插件的 jar 目标,生成普通的 jar 包。

普通 jar 包没法使用 java -jar xxx.jar 这样的命令来启动、运行,但是 SpringBoot 的设计理念就是每一个『微服务』导出为一个 jar 包,这个 jar 包可以使用 java -jar xxx.jar 这样的命令直接启动运行。
这样一来,打包的方式肯定要进行调整。所以 SpringBoot 提供了 spring-boot-maven-plugin 这个插件来定制打包行为。

在这里插入图片描述
③mybatis逆向工程

<!-- 控制 Maven 在构建过程中相关配置 -->
<build>
		
	<!-- 构建过程中用到的插件 -->
	<plugins>
		
		<!-- 具体插件,逆向工程的操作是以构建过程中插件形式出现的 -->
		<plugin>
			<groupId>org.mybatis.generator</groupId>
			<artifactId>mybatis-generator-maven-plugin</artifactId>
			<version>1.3.0</version>
	
			<!-- 插件的依赖 -->
			<dependencies>
				
				<!-- 逆向工程的核心依赖 -->
				<dependency>
					<groupId>org.mybatis.generator</groupId>
					<artifactId>mybatis-generator-core</artifactId>
					<version>1.3.2</version>
				</dependency>
					
				<!-- 数据库连接池 -->
				<dependency>
					<groupId>com.mchange</groupId>
					<artifactId>c3p0</artifactId>
					<version>0.9.2</version>
				</dependency>
					
				<!-- MySQL驱动 -->
				<dependency>
					<groupId>mysql</groupId>
					<artifactId>mysql-connector-java</artifactId>
					<version>5.1.8</version>
				</dependency>
			</dependencies>
		</plugin>
	</plugins>
</build>

4.)依赖仲裁(解决一些依赖冲突)

在这里插入图片描述

5.)profile

profile标签为某一个环境的自己的配置:

比如:开发环境和测试环境的数据库链接的属性一般是不一样的,用maven的时候可以使用profile标签来设置。(一般不推荐用maven的形式来设置)

profile标签有两种配置方式:①settings全局配置文件②pom文件

详细信息

五、生产实践

1.)搭建Maven私服

详细步骤

2.)jar包冲突问题

1.如何判断出了jar包冲突问题?

如果错误信息中完全没有我们所负责的部分,全部是第三方框架和工具类的错误,我们就可以推断jar包出现了问题。

2.解决方法:

找到jar包冲突的地方,排除掉或指定一个jar包。

如何快速找到发生了冲突的jar包

3.)体系外jar包引入

①新建一个不用maven的java项目
②用maven将java项目安装到本地仓库
在这里插入图片描述
③其他就一样了,直接在pom文件中引入java项目的依赖
在这里插入图片描述
在这里插入图片描述

4.)下载不了别的部门发版的代码的源码

1.执行:mvn dependency:resolve -Dclassifier=sources
2.点击下载
3.多次尝试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值