本文已参与[新人创作礼]活动,一起开启掘金创作之路。
哈喽,大家好!我是Why,一名在读学生,目前刚刚开始进入自己的编程学习生涯。虽然学习起步较晚,但我坚信做了才有0或1的可能。学了一段时间以后也是选择在掘金上分享自己的日常笔记,也希望能够在众多道友的大家庭中打成一片。 本文主要讲解maveb的核心文件、坐标以及声明周期,如果大家读后觉得有用的话,还请大家多多支持博主:欢迎 ❤️点赞👍、收藏⭐、留言💬 ✨✨✨个人主页:JinHuan
🎯1. Maven的核心文件pom.xml
POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。 执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。
<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>
<!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.companyname.project-group,Maven会将该项目打成的jar包放本地路径:/com/companyname/project-group -->
<groupId>com.jinhuan.Maven</groupId>
<!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
<artifactId>HelloWorld</artifactId>
<!-- 当前项目版本号:同一个项目开发过程中可以发布多个版本,此处标示0.0.1版 -->
<!-- 当前项目版本号:每个工程发布后可以发布多个版本,依赖时调取不同的版本,使用不同的版本号
当前项目版本号,snapshot为快照版本即非正式版本,release为正式发布版本
-->
<version>0.0.1-snapshot</version>
<!--打包类型,一般有jar、war、pom等-->
<packaging>jar</packaging>
<!-- 名称:可省略 ,常用于 Maven 生成的文档。-->
<name>Hello</name>
<!--项目描述:可省略,常用于 Maven 生成的文档-->
<description > </description>
<!-- 项目依赖构件配置,配置项目依赖构件的坐标 -->
<dependencies>
<!-- 依赖设置 ,可以有多个dependency节点--> <dependency>
<!-- 依赖组织名称 -->
<groupId>junit</groupId>
<!-- 依赖项目名称 -->
<artifactId>junit</artifactId> <!-- 依赖版本名称 -->
<version>4.12</version>
<!-- 依赖范围:test包下依赖该设置 --> <scope>test</scope>
</dependency>
</dependencies>
<!-- 项目构建配置,配置编译、运行插件等。-->
<build>......</build>
</project>
🎯2. Maven的坐标
🌈2.1什么是坐标
在平面几何中坐标(x,y)可以标识平面中唯一的一点。在Maven中坐标就是为了定位一个唯一确定的jar包。 Maven世界拥有大量构件,我们需要找一个用来唯一标识一个构建的统一规范。拥有了统一规范,就可以把查找工作交给机器.
🌈2.2 Maven坐标主要组成
groupId:定义当前Maven项目组织名称 artifactId:定义实际项目名称 version:定义当前项目的当前版本或者是所依赖的jar包的版本
<groupId>com.jinhuan</groupId>
<artifactId>demoProject</artifactId> <version>0.0.1-SNAPSHOT</version>
🌈2.3 定义Maven坐标
每个Maven工程都需要定义本工程的坐标,坐标是Maven对jar包的身份定义。
例如:定义一个入门程序的坐标
<!--项目名称,定义为组织名+项目名,类似包名-->
<groupId>com.kkb</groupId>
<!-- 模块名称 -->
<artifactId>my-first-Maven</artifactId>
<!-- 当前项目版本号,snapshot为快照版本即非正式版本,release为正式发布版本 --> <version>0.0.1-SNAPSHOT</version>
<packaging >jar</packaging>
<!--packaging 表示打包类型
jar:执行package会打成jar包
war:执行package会打成war包
pom :用于Maven工程的继承,通常父工程设置为pom
-->
🎯3 Maven的生命周期
🌈3.1 什么是生命周期
Maven生命周期就是为了对所有的构建过程进行抽象和统一。包括项目清理、初始化、编译、打包、测试、部署等几乎所有构建步骤。生命周期可以理解为构建工程的步骤。
🌈3.2Maven三大生命周期
Maven拥有三套相互独立的生命周期,分别是clean、default和site. clean Lifecycle: 在进行真正的构建之前进行一些清理工作。 mvn clean default Lifecycle: 构建的核心部分,编译,测试,打包,部署等等。 site Lifecycle: 生成项目报告,站点,发布站点。
🧣3.3.1 clean生命周期
clean的目的是清理项目。 每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比如,运行mvn clean ,这个的clean是Clean生命周期的一个阶段。有Clean生命周期,也有clean阶段。
包含3个阶段:
- pre-clean 执行一些清理前需要完成的工作
- clean 清理上一次构建过程中生成的文件,比如编译后的class文件等
- post-clean 执行一些清理后需要完成的工作
🧣3.3.2 default生命周期- 构建项目
所有生命周期中最核心的部分,绝大部分工作都发生在这个生命周期中。本文只介绍一些比较重要和常用的阶段:
generate-resources: 产生主代码中的资源在classpath中的包 process-resource: 复制并处理资源文件,至目标目录,准备打包。 compile: 编译项目的主源码.一般来说:编译src/main/java目录下的java文件至项目输出的主classpath目录中 test-compile:编译项目的测试代码,是编译src/test/java目录下的java文件至项目输出的测试classpath目录中 test:使用单元测试框架运行测试,测试代码不会被打包或部署. package:打包成可发布的格式 install: 将包安装到Maven本地仓库,供本地其他Maven项目使用 deploy:将最终的包复制到远程仓库,供其他开发人员和Maven项目使用
注意:
运行任何一个阶段的时候,它前面的所有阶段都会被运行,这也就是为什么我们运行mvn install 的时候,代码会被编译,测试,打包。此外,Maven的插件机制是完全依赖Maven的生命周期的,因此理解生命周期至关重要。
🧣3.3.3site生命周期-生成项目站点
目的:建立和发布项目站点
pre-site 执行一些在生成项目站点之前需要完成的工作. site 生成项目站点文档 post-site 执行一些在生成项目站点之后需要完成的工作. site-deploy 将生成的项目站点发布到服务器上
关于maven的核心文件、坐标以及声明周期的讲解就到这里了,下一篇我们讲解如何使用Idea搭建Maven项目(使用骨架与不使用骨架)