Java笔记-----(13)项目构建&依赖管理工具Maven

Maven是什么?(掌握)

Maven 是一个跨平台的强大构建工具,可以实现自动化构建过程,从“清理、编译、测试、生成报告、打包和部署”都可以使用成熟的插件,通过简单的命令实现,避免了重复的构建过程。

Maven 不仅是一个优秀的项目构建工具,还是一个依赖管理工具,它提供了强大的中央仓库,能够帮助我们自动下载依赖。

Maven 提供了一个很好的解决方案。Maven 通过使用GroupId和ArtifactId来标识每一个构件(依赖),也就是通过一个坐标系准确地定位到了一个 Java 类库。Maven 的中央仓库几乎可以找到任何流行的开源类库,通过在项目 POM 文件中配置,都可以免费下载。

Maven可以帮助我们自动下载依赖,通过在pom.xml文件中配置所需的依赖,Maven可以自动帮助我们从仓库中获取依赖,并且下载导入项目中。

总结:

  • Maven 可以帮助我们自动构建项目,减少重复劳动;
  • Maven 可以帮助我们自动下载依赖,减少手工劳动。

Maven的仓库

Maven 的仓库分为本地仓库远程仓库,远程仓库又分为中央仓库私服其它公共库

在这里插入图片描述

  • 本地仓库:就是 Maven 在本地(我们的计算机上)存储构件(依赖的 JAR 包等)的仓库,默认是在用户的.m2/repository/目录下。
  • 远程仓库:分为中央仓库、私服及其它公共库。用户是在和私服打交道,包括上传和下载构件。当私服满足不了我们的下载构件需求时,私服会和中央仓库或者其余公共仓库交互,将用户需要的构件缓存在私服仓库中
  • 私服:一种特殊的远程仓库,是在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的 Maven 用户使用。
  • 中央仓库:Maven 提供了一个中央仓库,其地址为:http://repo.maven.apache.org/maven2 ,该仓库包含了绝大多数流行的开源 Java 构件,以及源码、作者信息、SCM 信息、许可证信息等。据不完全统计,每个月中央仓库大概会接受全世界 Java 程序员大概 1 亿次访问,其重要性不言而喻。

settings.xml文件

当我们下载安装好 Maven 时,在其安装目录的 conf 下存在一个 settings.xml 的配置文件,这是一个全局的 Maven 配置文件,为了不影响这台计算机上的其他用户,一般选择将该文件copy到~/.m2/ 下边,作为一个用户层面的配置文件

settings.xml 文件中主要包含以下的元素:

  • localRepository:本地仓库的目录。默认是用户目录下面的 .m2/repository 目录。
  • interactiveMode:表示是否使用交互模式,默认是 true;如果设为 false,那么当 Maven 需要用户进行输入的时候,它会使用一个默认值。
  • offline:表示是否离线,默认是 false。这个属性表示在 Maven 进行项目编译和部署等操作时,是否允许 Maven
    进行联网来下载信息等。
  • mirrors定义一系列的远程仓库的镜像,用于缓解远程仓库的压力。
  • profiles:用于指定一系列的 profile。
  • activeProfiles:指定当前正在活跃的 profile。
  • servers:表示当需要连接到一个远程服务器的时候需要使用到的验证方式。

通过settings.xml,可以进行配置,比如仓库地址的配置,授权验证配置等,这里给出一个比较完整的settings.xml配置文件,以供学习参考使用。

<?xml version="1.0" encoding="UTF-8"?>
<settings>
	<mirrors>
		<mirror>
			<!--This sends everything else to /public -->
			<id>nexus</id>  // 镜像id
			<mirrorOf>*</mirrorOf>   // 表示代理所有仓库
			<url>http://nexus.d.xxx.net/nexus/content/groups/public</url>  // 该镜像的地址
		</mirror>
	</mirrors>
	
	<profiles>
		<profile>
			<id>development</id>
			
			<repositories> // 构件的仓库
				<repository>
					<id>central</id>
					<url>http://nexus</url>
					<releases><enabled>true</enabled></releases>
					<snapshots><enabled>true</enabled></snapshots>
				</repository>
			</repositories>
			
			<pluginRepositories> // 插件的仓库
				<pluginRepository>
					<id>central</id>
					<url>http://nexus</url>
					<releases><enabled>true</enabled></releases>
					<snapshots><enabled>true</enabled></snapshots>
				</pluginRepository>
			</pluginRepositories>
		</profile>
	</profiles>
	
	<activeProfiles>
		<activeProfile>development</activeProfile> 
		// 对于所有的POM,上边定义的id=development的profile都是活跃状态的
	</activeProfiles>
	
	<servers>
		<server>
			<id>archiva.internal</id>  // release版本的用户名和密码
			<username>yangwenqiang</username>
			<password>pwdpwd</password>
		</server>
		<server>
			<id>archiva.snapshots</id> // snapshot版本的用户名和密码
			<username>yangwenqiang</username>
			<password>pwdpwd</password>
		</server>
	</servers>
</settings>

当我们在pom中引入了依赖的坐标之后,Maven是如何去寻找依赖的?或者说是去哪里寻找并且下载依赖包的呢?

在pom文件中配置的依赖坐标,Maven通过去指定的仓库中去下载依赖,并且导入到了项目中,实现依赖的自动下载

Maven的生命周期

Maven 的生命周期是对所有的构建过程进行的抽象和统一。在大量项目的构建过程中,Maven 总结出了一套高度完善的,易于扩展的生命周期,包括项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和生成站点等构建步骤。

Maven 提供了三套独立的生命周期:clean、default 和 site,接下来我们分别介绍三套生命周期。

clean 生命周期

clean 生命周期的目的是清理项目,删除前一次构建在 target 文件夹下生成的各个 JAR 包等,它包含以下三个阶段:

  • pre-clean 执行一些清理前需要完成的工作
  • clean 清理上一次构建生成的文件
  • post-clean 执行一些清理后需要完成的工作

命令演示:

在命令行中输入 mvn clean 就是在调用 clean 生命周期的 clean 阶段,实际执行了 pre-clean 和 clean 阶段。

在这里插入图片描述

当执行了mvn clean之后,可以看到上次生成的target文件夹被删除清理掉了。

在这里插入图片描述

site生命周期

site生命周期的目的是建立和发布项目站点,Maven 可以给予 POM 所包含的信息,生成一个站点,方便团队交流和发布项目信息,其生命周期阶段包含:

  • pre- site
  • site 生成项目站点文档
  • post-site
  • site-deploy 将生成的项目站点发布到服务器上

site生命周期主要是用来生成站点,比如说当前项目的帮助文档站点等信息,简单了解即可,实际工作中一般不会使用到。

default 生命周期

default 生命周期定义了真正构建项目中需要执行的所有步骤,它包含的阶段如下:

  • validate
  • initialize
  • generate-sources
  • process-sources
  • generate-resources
  • process-resources
  • compile:编译项目的主源码
  • process-classes
  • generate-test-sources
  • process-test-sources
  • generate-test-resources
  • process-test-resources
  • test-compile
  • process-test-classed
  • test:使用单元测试框架运行测试,测试代码不会被打包或部署
  • prepare-package
  • package:接受编译好的代码,打包成可发布的格式,JAR/WAR 等
  • pre-integration-test
  • integration-test
  • post-integration-test
  • verify
  • install:安装构件到本地仓库
  • deploy:发布构件到远程仓库

命令演示:

  • mvn test:调用 default 生命周期的 test 阶段,实际执行了 validate 到 test 阶段之间的所有阶段
  • mvn clean package:调用 clean 生命周期的 clean 阶段和 default 生命周期的 package 阶段,实际执行了 pre-clean 和 clean 阶段和 default 生命周期 validate 到 package 阶段之间的所有阶段
  • mvn clean install:调用 clean 生命周期的 clean 阶段和 default 生命周期的 package 阶段,实际执行了 pre-clean 和 clean 阶段和 default 生命周期 validate 到 install 阶段之间的所有阶段
  • mvn clean deploy:调用 clean 生命周期的 clean 阶段和 default 生命周期的 package 阶段,实际执行了 pre-clean 和 clean 阶段和 default 生命周期 validate 到 deploy 阶段之间的所有阶段

常用构建命令功能:(重点掌握)

在日常的 Maven 使用中,一条条简单的命令,mvn clean、mvn package 等都是在执行 Maven 的某个生命周期阶段,各个常用命令的功能如下:

  • mvn clean :删除上次打包生成的target文件夹。
  • mvn compile:对源代码进行编译。
  • mvn clean package:用于清除上次打包生成得target文件夹并且对项目进行打包。
  • mvn clean install :将项目之前编译打包生成得target文件夹删除并且重新将项目打包,然后安装到本地仓库。
  • mvn clean deploy :将项目之前编译打包生成得target文件夹删除并且重新将项目打包,然后将包发布到了远程仓库(私服)。

Maven常用构建命令案例

这是没有进行项目构建时候的项目结构图:

在这里插入图片描述

然后,我们执行mvn compile对项目进行编译:

在这里插入图片描述

再来执行 mvn package,可以看到target下出现了所构建的当前项目的依赖包:

在这里插入图片描述

最后,执行mvn install可以看到当前项目被安装到了本地仓库中:
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值