一,maven的介绍
Maven是一个项目管理工具,它包含了一个项目对象模型,一组标准集合,一个项目生命周期,一个依赖管理系统和用来运行定义在生命周期阶段中插件目标的逻辑。简单来说,maven的作用是通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。
标准目录结构:
src
-main
–bin脚本库
–java java源代码文件
–resources资源库,会自动复制到classes目录里
–filters资源过滤文件
–assembly组件的描述配置(如何打包)
–config配置文件
–webapp web应用的目录。WEB-INF、css、js等
-test
–java单元测试java源代码文件
–resources测试需要用的资源库
–filters测试资源过滤库
-site Site(一些文档)
target
LICENSE.txtProject’slicense
README.txtProject’sreadme
二,环境搭建(配置环境变量)
(1)在path路径添加Maven的bin目录路径
D:\maven-3.3.9\bin
(2)添加环境变量 M2_HOME
M2_HOME = D:\maven-3.3.9
三,maven常用的构建命令
mvn -version/-v | 显示版本信息 |
mvn package | 打包生成target目录,编译、测试代码,生成测试报告,生成jar/war文件 |
mvn jetty:run | 运行项目于jetty上, |
mvn compile | 编译 |
mvn test | 编译并测试 |
mvn clean | 清空生成的文件 |
mvn install | 安装jar包到本地仓库中 |
mvn archetype:generate | 按照提示一步一步来创建mvn项目 |
mvn archetype:generate | 一步到位,直接创建mvn项目 -DgroupId=组织名 -DartifactId=项目名-模块名 -Dversion=版本号 -Dpackage=代码所在的包名 |
四,Pom.xml
该文件在maven工程中发挥着核心作用,源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系
等等的管理都是通过Pom.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">
<!-- maven版本模块 -->
<modelVersion>4.0.0</modelVersion>
<!-- 基本设置 The Basics -->
<!--整个系统的名称。-->
<groupId>...</groupId>
<!--子模块名称。-->
<artifactId>...</artifactId>
<!--依赖项的版本-->
<version>...</version>
<!--打包类型,jar,war等-->
<packaging>...</packaging>
<!-- 依赖集合 -->
<dependencies>...</dependencies>
<!-- 管理jar包的版本,使子项不显示版本 -->
<dependencyManagement>...</dependencyManagement>
<!-- 子模块对父模块的继承-->
<parent>...</parent>
<!-- 指定多个模块一起编译 -->
<modules>...</modules>
<properties>...</properties>
<!-- 构建过程的设置 Build Settings -->
<build>...</build>
<reporting>...</reporting>
<!-- 项目信息设置 More Project Information -->
<!-- 项目描述名-->
<name>...</name>
<!--项目描述信息-->
<description>...</description>
<!--项目地址-->
<url>...</url>
<inceptionYear>...</inceptionYear>
<!--许可证信息 -->
<licenses>...</licenses>
<!-- 组织信息-->
<organization>...</organization>
<!-- 开发人员信息-->
<developers>...</developers>
<!-- 环境设置 Environment Settings -->
<issueManagement>...</issueManagement>
<ciManagement>...</ciManagement>
<mailingLists>...</mailingLists>
<scm>...</scm>
<prerequisites>...</prerequisites>
<repositories>...</repositories>
<pluginRepositories>...</pluginRepositories>
<distributionManagement>...</distributionManagement>
<profiles>...</profiles>
</project>
五,maven中的依赖关系
项目之间的依赖是通过pom.xml文件里面的dependencies元素下面的dependency元素进行的。一个dependency元素定义一个依赖关系。在dependency元素中我们主要通过依赖项目的groupId、artifactId和version来定义所依赖的项目。
groupId | 依赖项的groupId |
artifactId | 依赖项的artifactId |
version | 依赖项的版本 |
scope | 依赖项的适用范围: compile,缺省值,适用于所有阶段,会随着项目一起发布。 provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。 runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。 test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。 system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。 |
exclusions | 排除项目中的依赖冲突时使用。 |
六,依赖冲突
什么是依赖冲突?
比如C依赖了A和B,A和B有一个相同的jar,但是这个jar版本不一样,比如一个是1.0的,一个是2.0的,那C是依赖了1.0的包呢还是2.0的包?
检查项目中的依赖冲突:
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
</plugin>
</plugins>
</reporting>
运行:
mvnproject-info-reports:dependencies
就可以查看依赖项报告。
去除依赖项的代码:
<exclusions>
<exclusion>
<groupId>com.amuxia.mavenTest</groupId>
<artifactId>projectC</artifactId>
</exclusion>
</exclusions>
原则:
1,短路优先
短路优先,例如:
甲项目->乙项目->丙项目(IO-1.0.jar)
甲项目->丁项目(IO-2.0.jar)
那么,甲项目添加的依赖包就是2.0
2,路程一样,先声明的优先
即在pom.xml中配置的顺序,在上面谁先加载的就使用谁的jar包。