【Maven】-使用总结-详解

720 阅读5分钟

Maven的好处

依赖管理:maven对项目中jar包的管理过程。传统工程我们直接把jar包放置在项目中。 maven工程真正的jar包放置在仓库中,项目中只用放置jar包的坐标。

一键构建:maven自身集成了tomcat插件,可以对项目进行编译,测试,打包,安装,发布等操作

  • 节省磁盘空间
  • 可以一键构建
  • 可以跨平台
  • 应用在大型项目时可以提高开发效率

仓库

  • 本地仓库
  • 远程仓库(私服)
  • 中央仓库

仓库之间的关系:当我们启动一个maven工程的时候,maven工程会通过pom文件中jar包的坐标去本地仓库找对默认情况下,如果本地仓库没有对应jar包,maven工程会自动去中央仓库下载jar包到本地,在公司中,如果本地没有对应jar包,会先从私服下载jar包,如果私服没有iar包,可以从中央仓库下载,也可以从本地上传。

Maven常用命令

命令解释
mvn package打包发布
mvn clean清理(删除target目录下编译内容),可以配合相应命令一起使用,如mvn clean package, mvn clean test
mvn install打包后将其安装在本地仓库,然后提供其他项目设置依赖引入
mvn build重新对该maven项目进行打包
mvn deploy将打包的文件发布到远程(如服务器)参考,提供其他人员进行下载依赖
mvn compile编译项目,该命令可以对src/main/java目录的下的代码进行编译
mvn test测试命令,或执行src/test/java/下所有junit的测试用例

Maven的坐标的主要组成及书写规范

坐标解释
groupId定义当前的Maven项目属于哪个项目,公司或组织域名的倒序
artifactId项目名或模块名,定义实际项目中的某一个模块
version定义当前项目的当前版本
package定义当前项目的打包方式

添加坐标

  1. 在本地仓库中搜索
  2. 互联网上搜,推荐网址 www.mvnrepository.com/

Maven 特点

依赖传递

在Maven中,依赖是可以传递的,就是说假设存在三个项目,分别是项目A,项目B以及项目C,假设C依赖于B,B依赖于A,那么我们可以根据Maven项目依赖的特征不难推出项目C也依赖于A。

Maven中的继承

  在Maven中,子项目是可以继承父项目中的依赖的,比如说我们有一个父项目maven-parent,该父项目拥有一个子项目A,如果在父项目中依赖了junit,那么在子项目A中即便是没有引入junit,在子项目中仍然能够使用junit,因为子项目天然继承了父项目中的junit依赖。

Maven的jar包冲突

直接依赖**:项目中直接导入的jar包,就是该项目的直接依赖包。 传递依赖:项目中没有直接导入的jar包,可以通过项目直接依赖jar包传递到项目中解决jar包冲实的方式:

  1. 声明者优先原则: 哪个jar包的坐标在靠上的位置,这个jar包就是先声明的。 先声明的jar包坐标下的依赖包,可以优先进入项目中。
  2. 路径近者优先原则: 直接依赖路径比传递依赖路径近,那么最终项目进入的jar包会是路径近的jar包
  3. 直接排除依赖: jar包下依赖包,在配置exclusions标签的时侯,内部可以不写版本号。 因为此时依赖包使用的版本和默认和本jar包一样。如例子:
<exclusions>
	<exclusion>
		<group Id>org. springframework</group Id>
		<artifactId spring-core</artifactId)
	</exclusion>
</exclusions>

生命周期Maven存在三套

每个生命周期包含一些阶段(phase),阶段是有顺序的,后面的阶段依赖于前面的阶段。

1、clean生命周期:清理项目,包含三个phase(阶段)。

  1. pre-clean:执行清理前需要完成的工作
  2. clean:清理上一次构建生成的文件
  3. post-clean:执行清理后需要完成的工作

2、default生命周期:构建项目

  1. validate:验证工程是否正确,所有需要的资源是否可用。
  2. compile:编译项目的源代码。  
  3. test:使用合适的单元测试框架来测试已编译的源代码。这些测试不需要已打包和布署。
  4. Package:把已编译的代码打包成可发布的格式,比如jar。
  5. integration-test:如有需要,将包处理和发布到一个能够进行集成测试的环境。
  6. verify:运行所有检查,验证包是否有效且达到质量标准。
  7. install:把包安装到maven本地仓库,可以被其他工程作为依赖来使用。
  8. Deploy:在集成或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。

3、site生命周期:建立和发布项目站点

  1. pre-site:生成项目站点之前需要完成的工作
  2. site:生成项目站点文档
  3. post-site:生成项目站点之后需要完成的工作
  4. site-deploy:将项目站点发布到服务器