传统项目管理的缺点:jar包可能不统一或不兼容、工程升级维护过程繁琐…
Maven的本质是项目管理工具,将项目开发和管理过程抽象成项目对象模型(POM,Project Object Model),即一个项目就是一个对象。
项目构建:提供标准的、跨平台的自动化项目构建方式
依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题
统一开发结构:提供标准的、统一的项目结构
Maven官网:https://maven.apache.org/download.cgi
环境变量配置
系统变量新建MAVEN_HOME:maven目录位置
Path变量添加:%MAVEN_HOME%\bin
cmd命令行输入mvn检查配置是否成功
仓库:存储jar包
本地仓库:本机存储资源的仓库,可以连接远程仓库(私服)获取资源
远程仓库:非本机电脑的仓库,能为本地仓库较快提供资源
中央仓库:Maven团队管理,存储所有资源的仓库,在国外
坐标:用于定位资源,便于查找
Maven坐标组成部分
本地仓库的默认位置实在C盘当前用户目录的.m2目录中,由于C盘是系统盘,需要修改位置
进入maven的conf目录的配置文件setting.xml,修改localRepository,如下
pom文件中的中央仓库位于国外,在setting.xml中配置使用阿里云的镜像仓库
1、新建空项目,设置SDK
2、修改Maven配置(可以使用默认,这里将其更改为已安装的maven)
3、新建一个maven模块
4、项目坐标
5、在test目录新建resources目录
6、选择不同目录的类型,点击应用后自动生成该模块的pom.xml文件
7、在pom.xml文件中添加所需依赖并保存,进入maven项目窗口,刷新查看依赖是否添加成功
8、在main目录和test目录写入源代码和测试代码
9、在maven项目窗口双击compile和test命令进行编译和测试
10、终端窗口显示run的数量为1表示已运行一个测试样例,运行成功。并且在target/surefire-reports目录下的xml文件也可以查看测试用例报告
11、执行install命令,可以生成对应版本的jar包
在创建module时选择quickstart
在创建module时选择
1、在mvnrepository仓库中找到tomcat插件,复制插件的坐标
2、在pom.xml文件中添加该插件的坐标(注意结构)
3、如果有报错,那就打开右侧Maven项目窗口,点击刷新。在IDEA下载完成之后报错就消失了
4、在Maven项目窗口找到tomcat插件,双击run命令运行。运行成功后会显示运行网页的URL,即表示运行成功
5、可以在插件中配置端口和默认访问路径的配置
依赖是指当前项目运行需要的jar包,一个项目可以设置多个依赖
<dependencies>
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.14version>
dependency>
dependencies>
将项目A作为项目B的资源:方法是将项目A的坐标当作依赖配置到项目B的pom.xml文件中
刷新Maven项目窗口,在java02项目的依赖中会出现web01项目。
如果项目A中有依赖,项目B也可以使用项目A中的依赖。
如果依赖重复,优先使用距离项目近的依赖(即层级小的)
web01作为java02的依赖,web01中的依赖log4j隐藏,则java02对log4j不可见
<dependencies>
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.14version>
<optional>trueoptional>
dependency>
dependencies>
web01作为java02的依赖,java02和web01都有log4j依赖,要在web01依赖传递的时候排除log4j依赖
<dependency>
<groupId>com.lzhgroupId>
<artifactId>web01artifactId>
<version>1.0-SNAPSHOTversion>
<exclusions>
<exclusion>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
exclusion>
exclusions>
dependency>
依赖的jar默认情况可以在任何地方使用,可以通过scope标签限定依赖的使用范围
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.11version>
<scope>providedscope>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.5.3version>
<scope>testscope>
dependency>
不同依赖范围的性质
web01是java02的直接依赖,gson是web01的直接依赖,gson是java02的间接依赖。
在项目传递时,gson的依赖范围也可能会发生变化,具体变化如下表,内容为空表示java02对gson不可见
如下配置,直接依赖为compile,间接依赖为runtime,故gson在java02范围是runtime
<dependency>
<groupId>io.github.openfeigngroupId>
<artifactId>feign-gsonartifactId>
<version>11.2version>
<scope>runtimescope>
dependency>
<dependency>
<groupId>com.lzhgroupId>
<artifactId>web01artifactId>
<version>1.0-SNAPSHOTversion>
<scope>compilescope>
dependency>
在maven官网提供了一些与生命周期有关的插件,用于在生命周期的某个阶段做出对应的工作
以生成源码包的插件为例,描述maven生命周期插件的使用。
1、找到Packaging下的source插件
2、source:jar 用于将项目的main目录源码处理成jar包
source:test-jar 用于将项目的test目录源码处理成jar包
3、点击Configuring Source Plugin查看插件配置源码
4、写入pom文件中,刷新maven项目窗口
5、配置该插件的执行目标和执行阶段
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-source-pluginartifactId>
<version>3.2.0version>
<executions>
<execution>
<goals>
<goal>jargoal>
<goal>test-jargoal>
goals>
<phase>generate-test-resourcesphase>
execution>
executions>
plugin>
plugins>
build>
6、generate-test-resources阶段在compile和test之间。执行compile时,项目只生成了target目录。执行test时,项目生成可target目录和对应的main源码jar包和test源码jar包