额外知识点
- IDE
- IDE是集成开发环境的缩写,它是一种软件应用程序,提供了编码、调试和部署软件的一站式解决方案。这些功能集成在一起,使开发人员能够在一个环境中完成整个软件开发过程,从编写代码到调试和测试,直到最终部署。常见的IDE包括Visual Studio、Eclipse、IntelliJ IDEA、MyEclipse等。
Maven基础
-
定义
- Apache Maven是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档,官网:http://maven.apache.org/
- Maven是专门用于管理和构建Java项目的工具
-
功能
-
提供了一套标准化的项目结构---所有IDE使用Maven构建的项目结构完全一样,此时所有IDE创建的Maven项目可以通用
- 解释:你在myeclipse中写的项目在idea中就无法正常成功运行,原因是由于项目结构不一样(即目录不一样),而Maven解决了该问题
-
提供了一套标准化的构建流程(编译、测试、打包、发布、...)
- 标准化构建流程如图所示,Maven提供了一套简单的命令来完成项目的构建
-
提供了一套依赖管理机制
- 依赖管理机制就是管理项目所依赖的第三方资源,比如:jar包、插件等等
- 以往我们导入jar包的操作很繁琐(要先创建一个lib目录,然后将下载的jar包放入该目录下,最后将jar包
Add as Library
加入工作环境),而利用Maven即可不用这么繁琐 - Maven使用标准的坐标配置来管理各种依赖,它只需要简单的配置就可以完成依赖管理
-
-
Maven模型
- 项目对象模型(Project Object Moudle)
- 依赖管理模型(Dependency)
- 插件(Plugin)
-
Maven仓库定义
-
仓库(Repository)是用来存储项目依赖项(如库、框架、插件等)的地方。仓库是一个包含了各种Java类库和插件的中央集合,Maven通过仓库来查找、下载和管理项目所需的依赖项。
-
解释:假设现在有个项目1,该项目需要一个jar包,首先Maven会先去本地仓库中寻找,若本地仓库中没有,则会去中央仓库中寻找,若中央仓库中有想要的jar包,则Maven会自动将jar包下载到本地仓库中,此时项目即可利用该jar包进行工作。此时假设有个项目2,也需要项目1所需的jar包,由于项目1所需的jar包已经放到本地仓库中了,所以项目2可直接使用该jar包
-
-
Maven仓库分类
- 本地仓库:自己计算机上的一个目录
- 中央仓库:由Maven团队维护的一个全球唯一的一个仓库(地址:https://repo1.maven.org/maven2/),放的基本上都是免费的开源的jar包
- 远程仓库(私服):一般由公司团队搭建的私有仓库。(搭建的私有仓库除了会将中央仓库中的jar中均下载到私有仓库中,还会放一些自己写的jar包或有版权信息的jar包等)
注意:
1.当项目中使用坐标引入对应依赖的jar包后,首先会查找本地仓库中是否有对应的jar包,若有则在项目中直接引用;反之则会去中央仓库中下载对应的jar包到本地仓库
2.若搭建远程仓库,则将来jar包的查找顺序变为:本地仓库>远程仓库>中央仓库
-
Maven坐标
- Maven中的坐标是资源的唯一标识
- 使用坐标来定义项目或引入项目中需要的依赖
-
Maven坐标的主要组成
组成 解释 groupId
为当前Maven项目隶属的 组织名称 (通常是域名反写,如:com.itheima) artifactId
为当前Maven的项目名称 (通常是模块名称,如:order-service、goods-service) version
定义当前的版本号 scope
定义依赖的作用范围
Maven安装配置
-
Maven安装配置步骤
-
下载apache-maven-3.9.5.rar然后解压到自己想要安装的位置即可安装完整
-
配置环境变量MAVEN_HOME为安装路径的bin目录
-
打开系统变量中的Path,将Maven加入,如图所示,然后一直单击确定即可
- 判断Maven是否配置成功:打开cmd输入命令
mvn -version
,若看到Maven的信息则代表配置成功,如图所示
- 判断Maven是否配置成功:打开cmd输入命令
-
配置本地仓库:修改
conf/settings.xml
中的<localRepository>
为一个指定的目录- 我为两个版本配置的本地仓库如下:
xml<localRepository>F:\app\apache-maven-3.8.8\maven-repository</localRepository>
xml<localRepository>F:\app\apache-maven-3.9.5\maven-repository</localRepository>
-
配置阿里云私服:修改
conf/settings.xml
中的<mirrors>
标签,为其添加如下子标签:xml<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
-
Maven基本使用
Maven常用命令
命令 | 解释 |
---|---|
compile |
编译 |
clean |
清理 |
test |
测试 |
package |
打包 |
install |
安装 |
注意:使用命令前需要加上
mvn
,比如:mvn compile
-
准备工作
-
在项目MavenOne中的pom.xml中写入配置信息,如下所示
xml<project xmlns="http://maven.apache.org/POM/4.0.0" XMLNS:XSI="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.itheima</groupId> <artifactId>maven-project</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <!-- 导入mysql驱动jar包--> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.32</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.12</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13</version> <scope>test</scope> </dependency> </dependencies> </project>
-
该项目的src中有两个目录,分别为main(源代码目录)和test(测试代码目录)
-
main中的代码如下
-
test中的代码如下
-
-
在iml文件所在处打开Powershell窗口
-
-
编译
-
在打开的Powershell窗口输入命令
mvn compile
注意:在刚配置完本地仓库时,由于仓库中无任何内容,所以在输入该命令后,会先下载所需的库(下载完成界面如图所示)以及插件,下载完成后再次输入该命令即可
-
输入
mvn compile
,若出现BUILD SUCCESS代表编译完成 -
编译完成后,在含有xml文件的文件夹目录内出现target目录,则进一步代表编译完成
-
-
-
清理
-
在Powershell窗口输入命令
mvn clean
,即可将target目录删除
注意:第一次执行mvn clean命令时会先去下载对应的jar包和插件
-
-
打包 ---将java代码编译成的的字节码文件打包成一个jar包
-
在Powershell窗口输入命令
mvn package
,执行成功后会重新生成一个target目录且该目录下有个jar包(注意第一次使用该命令时会先下载对应的插件和jar包)
-
-
测试 ---自动测试test(测试代码目录)下的代码
-
在Powershell窗口输入命令
mvn test
(第一次使用时会先下载对应的插件和jar包)
-
-
安装 ---将当前的项目打包成一个jar包装到本地仓库中
-
在Powershell窗口输入命令
mvn install
(第一次使用时会先下载对应的插件和jar包)
-
Maven生命周期
-
定义
- Maven构建项目生命周期描述的是一次构建过程经历了多少个事件
-
Maven对项目构建的生命周期划分为三套
- clean:清理工作
- default:核心工作,比如:编译、测试、打包、安装等等
- site:产生报告,发布站点等等
注意:在上图中有三套生命周期,执行某一套生命周期后面的命令时,该套生命周期前的所有命令会自动执行,而不是其他套前面的命令自动执行
IDEA中使用Maven
IDEA配置Maven步骤
-
File→Settings→搜索maven
-
设置IDEA使用本地安装的Maven并修改配置文件路径
-
Maven安装目录下的conf目录下的settings.xml属于全局配置,而用户目录的.m2目录下的settings.xml是属于当前用户配置(.m2目录下的settings.xml文件可能显示不出来但不代表在该目录下没有该文件),所以为了让idea中的maven配置并使用自己的全局配置需要以下几步:
-
第一步:打开C盘→用户→用户名→.m2→将文件settings.xml改名为settingsdrop.xml(若无settings.xml文件则创建一个空的settingsdrop.xml文件即可),如图所示
-
第二步:File→Settings→按图示设置maven
-
第三步:File→New Projects Setup →Settings for New Projects →然后按照第二步图示进行设置即可完成IDEA的Maven配置
注意 :IDEA在使用Maven时会以.m2目录下settings.xml文件为准,若在.m2目录下没找到该文件才会去使用自己在IDEA中配置的自己安装的Maven目录下的conf目录下的settings.xml文件。所以第一步的作用就是迷惑IDEA,让它去.m2目录下找不到settings.xml文件,从而不得不使用自己安装的maven下的settings.xml文件
-
-
示例:创建Maven Web项目成功后IDEA警告提示
IDEA创建Maven项目
-
创建Macven方式一
-
File→New→Project或Moudle,输入模块名,选择Maven,单击Create,如图二所示即创建成功
-
-
创建Maven方式二
-
File→Project Structure→选择Modules→单击
+
→New Module,然后按照图示操作即可创建成功
-
-
注意事项
-
在以上两种创建方式中test测试用例目录下均没有配置文件resources,若需要配置文件则按图示操作即可创建配置文件目录
-
IDEA导入Maven项目
-
步骤
- 单击IDEA右侧Maven面板→单击
+
号→选中对应项目的xml文件然后双击即可,如图所示
- 单击IDEA右侧Maven面板→单击
-
若IDEA右侧没有Maven的标志,则按如图所示方式设置即可
IDEA中使用Maven命令
-
步骤
-
单击IDEA右侧Maven面板→选中要执行Mavne命令的Maven项目→Lifecycle→双击要执行的命令即可,如图所示
-
IDEA配置Maven-Helper插件
-
步骤
-
File→Settings→Plugins→搜索Maven,选择Maven Helper安装,然后重启IDEA即可,如图所示
-
-
配置该插件的原因
- 若Maven项目过多时,此时你使用IDEA右侧的Maven面板来执行Maven命令就很繁琐,所以配置该插件
-
该插件使用方式
-
右键要使用Maven命令的Maven项目→Run Maven→选择要使用的命令
注意:从截图中可看出该插件可进行断点调试工作,比较方便
-
Maven坐标依赖管理
-
依赖管理导入jar包步骤
- 在pom.xml中编写
<dependencies>
标签 - 在
<dependencies>
标签中使用<dependency>
引入坐标 - 定义坐标的groupID、artifactId、version
- 单击刷新按钮,使坐标生效
- 在pom.xml中编写
-
以引入MySQL驱动jar包为例
-
百度输入mysql maven进入进入mysql依赖官网(https://mvnrepository.com/artifact/mysql/mysql-connector-java)(注意:若使用其他jar包则也在百度输入
名称 maven
进入对应的依赖官网即可 ) -
找到合适的mysql依赖单击进入,并复制Maven依赖到pom.xml文件中
-
第一次复制到pom.xml文件中时,mysql版本号会报红(原因是当前本地仓库中没有该版本的mysqljar包或插件),单击刷新按钮即可从中央仓库下载到本地仓库中,当不报红时说明已经下载到本地仓库
-
查看是否导入成功
-
单击IDEA右侧Maven面板→查看Dependencies目录中是否有mysql-connector-java:8.0.28,若存在则说明导入成功,如图所示
-
-
-
删除依赖管理jar包步骤
-
删除xml文件中想要删除的依赖对应的
<dependency>
标签及该标签的标签体,然后刷新即可,如图所示 -
查看是否删除成功
-
单击IDEA右侧Maven面板→查看Dependencies目录中是否有mysql-connector-java:8.0.28,若无则说明删除成功,如图所示
-
-
-
注意:有时候会忘记点击刷新,所以有更好的办法---即自动生效,步骤如下:
导入本地仓库jar包
-
注意
- 从中央仓库下载的jar包会自动保存到本地仓库中,下次使用时就属于从本地仓库中导入jar包
-
导入本地仓库中的jar包步骤
-
摁住
Alt + Insert
→Dependency→输入需要的jar包然后单击Add即可,如图所示
-
Maven依赖范围
-
定义
-
通过设置坐标的依赖范围(scope)来设置对应jar包的作用范围(比如:编译环境、测试环境、运行环境)
- 若设置坐标的依赖范围为 编译环境 :代表jar包在编译环境有效(即在main目录的java目录下的所有类均可用jat包)
- 若设置坐标的依赖范围为 测试环境 :代表jar包在测试环境有效(即在test目录的java目录下的所有类均可用jat包)
- 若设置坐标的依赖范围为 运行环境 :代表导入的jar包只在你将来运行项目时可用
-
-
使用的标签体为
<scope>作用范围</scope>
-
依赖范围关键字对应可用的作用范围
依赖范围 编译classpath 测试classpath 运行classpath 例子 备注 compile
Y Y Y logback <scope>
标签的 默认标签体test
- Y - Junit provided
Y Y - servlet-api 在编译环境和测试环境有效,但在真正运行时就不会在使用该jar包 runtime
- Y Y jdbc驱动 system
Y Y - 存储在本地的jar包 基本用不到 system
import
- 注意
- 以test举例说明(其他几个同理):假设设置的作用范围为test,此时在编译环境中的类就无法导入作用范围为test的jar包,也就意味着无法使用该jar包中的方法等内容
- 配置
<scope>作用范围</scope>
的关键字为test、provided、system的jar包在运行环境下无效,也就意味着若将此时的项目package(打包)成一个war包后,war包中不会包含有以上三个关键字的jar包(以MavenWeb项目为例) import
需引入DependencyManagement
,详见Maven高级部分
- 注意