2:Maven-Java Spring

77 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第24天,点击查看活动详情

2.1 Maven介绍

Maven是Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)管理一个项目的构建、依赖、报告和文档等步骤

  • 构建工具,实现自动化构建,跨平台,对外提供一致的操作接口
  • 依赖管理工具和项目信息管理工具,还提供了中央仓库
  • 于项目目录结构、测试用例命名方式等内容,提倡使用一个共同的标准规则

Maven会自动根据dependency中的依赖配置,在中央仓库下载相关依赖包到本地Maven库,本地Maven库默认是用户目录的.m2目录

Maven仓库:mvnrepository.com/

2.2 标准目录结构

目录用途
${basedir}存放pom.xml和所有的子目录
${basedir}/src/main/java项目的java源代码
${basedir}/src/main/resources项目的资源,比如说property文件,springmvc.xml
${basedir}/src/test/java项目的测试类,比如说Junit代码
${basedir}/src/test/resources测试用的资源
${basedir}/src/main/webapp/WEB-INFweb应用文件目录,web项目的信息,比如存放web.xml、本地图片、jsp视图页面
${basedir}/target打包输出目录
${basedir}/target/classes编译输出目录
${basedir}/target/test-classes测试编译输出目录
Test.javaMaven只会自动运行符合该命名规则的测试类
~/.m2/repositoryMaven默认的本地仓库目录位置

2.3 POM

POM( Project Object Model,项目对象模型 ) 是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖等,Maven 会在当前目录中查找并读取POM文件,获取所需的配置信息,然后执行目标,POM 中可以指定以下配置

  • 项目依赖
  • 插件
  • 执行目标
  • 项目构建 profile
  • 项目版本
  • 项目开发者列表
  • 相关邮件列表信息

父(Super)POM是 Maven 默认的 POM

  • 所有的 POM 都继承自一个父 POM(无论是否显式定义了这个父 POM)
  • 包含了一些可以被继承的默认设置,可以用Show Effective POM看到最终有效的POM定义

例如在POM文件中定义继承Spring-boot-starter-parent

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.1.6.RELEASE</version>
	<relativePath/> <!-- lookup parent from repository -->
</parent>

例如在插件中采用SpringBoot的插件来编译打包应用

<build>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
		</plugin>
	</plugins>
</build>

2.4 Maven生命周期

三个标准生命周期

  • clean:项目构建前的清理工作,删除前一次构建在target文件夹下生成 的各个Jar包等
  • default:构建,包括项目的编译,测试,打包,安装,部署等等
  • site:生成项目报告,发布站点,Maven可以根据pom所包含的信息 生成一个站点,方便团队交流和发布项目信息

2.5 Maven插件

Maven 实际上是一个依赖插件执行的框架,每个任务实际上是由插件完成。每个插件可以完成多个功能称为插件目标(Plugin Goal),Maven插件是阶段的内置绑定的

插件目标描述
spring-boot:run运行Spring Boot应用
spring-boot:repackage重新打包jar/war包为可执行包
spring-boot:help展示spring-boot-maven-plugin的帮助信息
spring-boot:start启动Spring应用程序,和run目标不同,该目标不会阻塞,并且允许其他目标来操作应用程序
spring-boot:stop停止使用start目标启动的spring应用程序,通常在测试套件 完成后被调用

Clean生命周期

阶段内置绑定的插件目标
cleanmaven-clean-plugin:clean

Default生命周期(当packaging的值是jar/war)

阶段内置绑定的插件目标
process-resourcemaven-resources-plugin:resources
compilermaven-compiler-plugin:compile
process-test-resourcesmaven-resources-plugin:testResources
test-compilemaven-compiler-plugin:testCompile
testmaven-surefire-plugin:test
packagemaven-jar-plugin:jar/maven-war-plugin:war
installmaven-install-plugin:install
deploymaven-deploy-plugin:deploy

Default生命周期(当packaging的值是pom)

阶段内置绑定的插件目标
installmaven-install-plugin:install
deploymaven-deploy-plugin:deploy

site生命周期

阶段内置绑定的插件目标
sitemaven-site-plugin:site
site-deploymaven-site-plugin:deploy