maven
maven
-
定义:Maven 是一个项目管理工具,它包含了一个项目对象模 型 (POM:Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管 理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标 (goal)的逻辑
-
安装:
1、解压
2、配置环境变量
- 在系统变量中新建MAVEN_HOME
- 配置:解压maven路径,如D:\apache-maven-3.6.1
- 在Path系统变量中加入
- %MAVEN_HOME%\bin
- 更改本地仓库位置
- 找到apache-maven-3.6.1\conf下的settings.xml文件里的localRepository
<!-- localRepository | The path to the local repository maven will use to store artifacts. | | Default: ${user.home}/.m2/repository <localRepository>此处填写本地仓库位置</localRepository> -->
* 路径要没有空格没有中文
仓库:本地仓库,远程仓库【私服】,中央仓库
- 在系统变量中新建MAVEN_HOME
-
maven标准目录结构
src/main/java —— 存放项目的.java文件
src/main/resources —— 存放项目资源文件,如spring, hibernate配置文件
src/test/java——存放所有单元测试java文件,如JUnit测试类
src/test/resources——测试资源文件
target——项目输出位置,编译后的class文件会输出到此目录
pom.xml——maven项目核心配置文件src/main/webapp——页面资源,js,css等
-
命令
mvn clean //清除编译信息 mvn compile //编译main下文件放在target下 mvn test //编译main、test下的文件 mvn package //打包,生成target mvn install //打包,生成target,在本地仓库中生成当前项目的jar包
-
maven的生命周期
1. 清除项目编译信息 clean --清理生理周期 1. 编译 compile 2. 测试 test 3. 打包 package --默认生命周期 4. 安装 install 5. 发布 deploy --站点生命周期
-
pom.xml包含信息
项目自身信息
项目运行所依赖的jar包信息
项目运行环境信息 jdk…
live Templates
<!-- https://mvnrepository.com/artifact/org.apache.tomcat.maven/tomcat7-maven-plugin -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8888</port>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<target>1.8</target>
<source>1.8</source>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
解决jar包冲突
maven 工程导入jar包的坐标,就必须要考虑解决jar包冲突问题
* 直接依赖:项目中直接导入的jar包,就是该项目的直接依赖包。
* 传递依赖:项目中没有直接导入的jar包可以通过项目直接依赖jar包传递到项目中。
-
第一声明优先原则,哪个jar包的坐标在靠上的位置,这个jar包就是先声明的,先声明的jar包坐标下的依赖包,可以优先进入项目中。
-
路径近者优先原则、直接依赖路径比传递依赖路径近,那么最终进入项目的jar包会是路径的直接依赖包。
-
直接排除【推荐使用】、当我们要排除某个jar包下的依赖包,在配置exclusions标签的时候,内部可以不写版本号。因为此时依赖包使用的版本和默认版本的jar包一样。
版本锁定
maven项目可以分父子依赖关系的。
凡是依赖别的项目后,拿到别的项目的依赖包,都属于依赖传递。
防止覆盖所依赖项目的jar包被覆盖可以使用锁住。 即使是同名jar包直接依赖,也无法覆盖
例:
<properties>
<spring.version>5.0.2.RELEASE</spring.version>
</properties>
<!--锁定jar包版本-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
<dependency>
<dependencies>
</dependencyManagement>
maven 工程拆分与聚合
dao 和parent 是直接依赖,作用域是complie
dao和junit是传递依赖,作用域是test
上图中-表示传递丢失,也就是不能用了。
实际开发中,如果传递依赖丢失,表示形式就是jar包的坐标导不进去。一般就是再导一次。
未完待续。。。。