目录
Maven 3.6.3 的下载、安装、配置、检测(详细讲解)_【官方推荐】、唐城的博客-CSDN博客_maven3.6.3安装
Maven 3.6.3 的下载、安装、配置、检测(详细讲解)_【官方推荐】、唐城的博客-CSDN博客_maven3.6.3安装
1.1 maven概念
传统构建项目遇到的问题:
- jar包不统一,jar包不兼容使用maven
- 工程升级维护过程操作繁琐
Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)
POM:项目对象模型
1.2 maven作用
项目构建:提供标准的,跨平台的自动化项目构建方式
依赖管理:方便快捷的管理项目以来的资源(jar包),避免资源间的版本冲突问题
统一开发结构:提供标准的,统一的项目结构
1.3 maven仓库
仓库:用于存储资源,包含各种jar包
本地仓库
远程仓库:
私服仓库:部门/公司范围内存储资源的仓库,从中央仓库获取资源,可放一些具有版权的仓库
中央仓库:MAVEN团队维护,存储所有资源的仓库,开源jar包
Maven仓库中用于描述仓库中资源位置
https://repo1.maven.org/maven2/junit/junit/4.13.2/
Maven坐标主要组成
grouId:定义当前Maven项目隶属组织名称
artifactID:定义当前Maven项目名称
version:定义当前项目版本号
mvnrepository.com 网站可以直接复制相关坐标代码
1.4 maven创建maven项目
点击右上角的Project Structure->Modules
改变文件属性右键文件Mark Directory as --
src中 java:Sources resources:Resources
test中java:Test resources:Test:Resources
1.5 idea创建web项目
Project->maven->选择SDK和Create from archetype
输入webapp->OK
idea2019.3 无法使用3.8.5 现配置3.6.3
引入spring-context 依赖才有spring config选项
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
</dependencies>
构建tomcat,可以通过依赖的方式构建
<!-- 构建tomcat -->
<build>
<!-- 设置插件 -->
<plugins>
<!-- 具体插件位置 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>80</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
点击edit configarations,选择maven,点击添加,
name:启动服务器 command line: tomcat:run OK
1.6 依赖配置
依赖指当前项目所需的jar,一个项目可以设置多个依赖
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
</dependencies>
1.7 依赖管理
1.7.1 依赖传递
依赖具有传递性:
直接依赖:在当前项目中通过依赖配置建立的依赖关系
间接依赖:被资源的资源如果依赖其他资源,当前项目依赖其他资源
项目3的坐标
<groupId>com.it3</groupId>
<artifactId>web01</artifactId>
<version>1.0-SNAPSHOT</version>
在项目2中把项目3的坐标用依赖方式写入就可以了
<dependencies>
<dependency>
<groupId>com.it3</groupId>
<artifactId>web01</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
1.7.2 依赖传递冲突问题
路径优先:当依赖中出现相同的资源是,层级越深,优先级越低,层级越浅,优先级越高
声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
1.7.3 可选依赖
可选依赖指对外隐藏当前所选依赖的资源---不透明
项目3
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
<optional>false</optional><!--自己的东西不被别人用,设false 项目3被项目2使用不显示log4j-->
</dependency>
1.7.4 排除依赖
排除依赖指主动断开以来的资源,被排除的资源无需指定版本---不需要
项目2
<dependency>
<groupId>com.it</groupId>
<artifactId>web02</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions> <!--取其精华去其糟粕,排除项目3中的log4j,主动排除-->
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusions>
</dependency>
1.7.5 依赖范围
依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其作用范围
- 主程序范围有效(main文件夹范围内)
- 测试程序范围有效(test文件夹范围内)
- 是否参与打包(package指令范围内)
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
<scope>runtime</scope>
</dependency>
1.8 生命周期与插件
Maven对生命周期划分为3套
- clean:清除工作
- pre-clean 执行一些需要在clean之前完成的工作
- clean 移除所有上一次构建生成的文件
- post-clean 执行一些需要在clean之后立刻完成的工作
- default:核心工作,例如编译,测试,打包,部署
- site产生报告,发布站点
插件
<build>
<plugins>
<plugin>
<!--插件:对源码打jar包-->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<goals>
<goal>jar</goal>
<goal>test-jar</goal> <!--对test打-->
</goals>
<phase>generate-test-resources</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>