Maven简介
maven是什么
Maven本质是一个项目管理工具, 将项目开发和管理过程抽象成一个项目对象模型(Project Object Model, 即POM).
Maven工具本身的概念并不包括pom.xml和maven仓库.
maven的作用
- 项目构建: 提供标准的, 跨平台的自动化项目构建方式
- 依赖管理: 避免资源间的版本冲突问题
- 统一开发结构: 提供标准的, 统一的项目结构
Maven配置文件
配置文件==setting.xml==
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0
https://maven.apache.org/xsd/settings-1.2.0.xsd">
<!--配置本地仓库-->
<localRepository>D:\MavenRepository</localRepository>
<pluginGroups>
</pluginGroups>
<proxies>
</proxies>
<servers>
</servers>
<mirrors>
<!--配置central仓库的镜像-->
<mirror>
<id>aliyun</id>
<mirrorOf>central</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
<profiles>
<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>
</profiles>
</settings>
Maven插件与命令(手工方式)
maven compile: 将项目编译, 放入到生成的==target文件夹==中maven clean: 清除之前生成的==target文件夹==maven package: 生成jar包或war包maven install: 将生成的jar包放入到本地仓库中, 根据定义的maven坐标决定存放的位置
IDEA生成Maven项目
依赖管理
依赖传递
如果在同一个工程下, 模块之间相互引用, 只需要将
<groupId>com.example</groupId>
<artifactId>xSpringBoot</artifactId>
<version>0.0.1-SNAPSHOT</version>
当作另一个项目的maven坐标使用即可
依赖冲突
- 路径优先: 引入的依赖越靠近当前项目优先级越高
- 声明优先
可选依赖(不透明)
对外隐藏项目中使用了哪些依赖, 使用<options>true</options>标识
排除依赖(不需要)
去除掉传递过来的依赖, 使用<exlusions></exclusion>标识
依赖范围
作用范围<scope>
- 主程序范围(main文件夹)
- 测试范围(test文件夹)
- 是否参与打包(maven packge指令范围)
| scope | 主代码(main) | 测试代码(test) | 打包(maven package) |
|---|---|---|---|
| compile(默认值) | y | y | y |
| test | y | ||
| provided | y | y | |
| runtime | y |
用途
- test范围: 测试代码, 例如junit, 不会出现在主程序中, 也不需要打包
- provided范围: 对于服务器本身已经存在的依赖, 这些依赖不能够打包, 否则和服务器提供的依赖之间产生依赖冲突并覆盖服务器提供的那个依赖.
- runtime范围: 用于在配置文件中使用到, 但主代码和测试代码中均不会使用到的类. 例如数据库驱动等.