首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Maven基本知识

Maven基本知识

作者头像
OY
发布2022-03-17 17:00:59
发布2022-03-17 17:00:59
8290
举报
文章被收录于专栏:OY_学习记录OY_学习记录

一、Maven 基本

1、自动化构建

​ 简单来说就是它可以自动的从建构过程的起点一直执行到终点:

2、Maven 核心概念

  1. POM
  2. 约定的目录结构
  3. 坐标
  4. 依赖管理
  5. 仓库管理
  6. 生命周期
  7. 插件和目标
  8. 继承
  9. 聚合

3、安装使用

检查 JAVA_HOME 环境变量

解压 Maven 的核心程序

​ 将 apache-maven-3.5.0-bin.zip 解压到一个非中文无空格的目录下。 例如:

代码语言:javascript
复制
D:\Server\apache-maven-3.5.0

配置环境变量

M2_HOME:D:\Server\ apache-maven-3.5.0(以自己安装路径的为准)

path:%M2_HOME%\bin 或 D:\Server\ apache-maven-3.5.0\bin

查看 Maven 版本信息验证安装是否正确

配置本地仓库

  1. Maven 默认的本地仓库: ~.m2\repository 目录 。Tips: ~表示当前用户的家目录。
  2. Maven 的核心配置文件位置
代码语言:javascript
复制
解压目录\ D:\Server\ apache-maven-3.5.0\conf\settings.xml
  1. 设置方式
代码语言:javascript
复制
<localRepository>以及准备好的仓库位置</localRepository>
<localRepository>D:/RepMaven</localRepository>
  1. 配置镜像源
代码语言:javascript
复制
<mirror>
     <id>alimaven</id>
     <mirrorOf>central</mirrorOf>
     <name>aliyun maven</name>
     <url>http://maven.aliyun.com/nexus/content/groups/public</url>
   </mirror>
  1. 配置使用的 JDK 版本
代码语言:javascript
复制
<profile>
	<id>jdk-1.8</id>

	<activation>
		<activeByDefault>true</activeByDefault>
		<jdk>1.8</jdk>
	</activation>

	<properties>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
		<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
	</properties>
</profile>

二、Maven 结构

  • main: 目录用于存放主程序
  • test: 目录用于存放测试的程序
  • java: 目录用于存放源码的文件。
  • resources: 目录用于存放配置文件和资源文件

1、Maven 约定的目录结构 (cmd 中使用)

注意:运行 Maven 命令时一定要进入 pom.xml 文件所在的目录!

指令

描述

mvn compile

编译源代码

mvn test-compile

编译测试代码

mvn test

运行应用程序中的单元测试

mvn clean

清除目标目录中的生成结果

mvn site

生成项目相关信息的网站

mvn package

依据项目生成 jar 文件

mvn install

在本地 Repository 中安装 jar

mvn idea:idea

生成 idea 项目

mvn archetype:create

创建 Maven 项目

mvn eclipse:eclipse

生成 eclipse 项目

mvn source:jar

单独打包源码

补充:

指令

描述

mvn clean package

mvn clean compile

清理编译

mvn clean test

三、POM

Project Object Model:项目对象模型。 将 Java 工程的相关信息封装为对象作为便于操作和管理的模型。 Maven 工程的核心配置。 可以说学习 Maven 就是学习 pom.xml 文件中的配置。

四、坐标

1、Maven 的坐标

<groupId>com.oy.maven</groupId> <artifactId>Hello</artifactId> <version>0.0.1-SNAPSHOT</version>

  • groupId:公司或组织的域名倒序+当前项目名称
  • artifactId: 当前项目的模块名称
  • version:当前模块的版本

2、通过坐标到仓库中查找 jar 包

  1. 将 gav 三个向量连起来
代码语言:javascript
复制
com.oy.maven+Hello+0.0.1-SNAPSHOT
  1. 以连起来的字符串作为目录结构到仓库中查找
代码语言:javascript
复制
com/oy/maven/Hello/0.0.1-SNAPSHOT/Hello-0.0.1-SNAPSHOT.jar

注意:我们自己的 Maven 工程必须执行安装操作才会进入仓库。 安装的命令是: mvn install

五、依赖管理

1、基本概念

当 A jar 包需要用到 B jar 包中的类时,我们就说 A 对 B 有依赖。例如: commons-fileupload-1.3.jar 依赖于 commons-io-2.0.1.jar。通过第二个 Maven 工程我们已经看到, 当前工程会到本地仓库中根据坐标查找它所依赖的 jar 包。配置的基本形式是使用 dependency 标签指定目标 jar 包的坐标。 例如:

代码语言:javascript
复制
<dependencies>
	<dependency>
		<!—坐标 -->
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.10</version>
		<!-- 依赖的范围 -->
		<scope>test</scope>
	</dependency>
</dependencies>

2、接依赖和间接依赖

如果 A 依赖 B, B 依赖 C, 那么 A→B 和 B→C 都是直接依赖,而 A→C 是间接依赖。

3、依赖的范围

① compile

  1. main 目录下的 Java 代码可以访问这个范围的依赖
  2. test 目录下的 Java 代码可以访问这个范围的依赖
  3. 部署到 Tomcat 服务器上运行时放在 WEB-INF 的 lib 目录下

​ 例如: 对 Hello 的依赖。主程序、测试程序和服务器运行时都需要用到。

② test

  1. main 目录下的 Java 代码不能访问这个范围的依赖
  2. test 目录下的 Java 代码可以访问这个范围的依赖
  3. ]部署到 Tomcat 服务器上运行时不会放在 WEB-INF 的 lib 目录下

​ 例如:对 junit 的依赖。仅仅是测试程序部分需要。

③ provided

  1. main 目录下的 Java 代码可以访问这个范围的依赖
  2. test 目录下的 Java 代码可以访问这个范围的依赖
  3. 部署到 Tomcat 服务器上运行时不会放在 WEB-INF 的 lib 目录下 例如: servlet-api 在服务器上运行时, Servlet 容器会提供相关 API,所以部署的时候不需要。

4、依赖的传递性

5、依赖的原则: 解决 jar 包冲突

① 路径最短者优先

② 路径相同时先声明者优先

​ 这里“声明”的先后顺序指的是 dependency 标签配置的先后顺序。

6、依赖的排除

代码语言:javascript
复制
<dependency>
	<groupId>com.atguigu.maven</groupId>
	<artifactId>Survey160225_4_Environment</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<!-- 依赖排除 -->
	<exclusions>
		<exclusion>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
		</exclusion>
	</exclusions>
</dependency>

7、统一管理目标 jar 包的版本

代码语言:javascript
复制
<properties>
	<spring.version>4.1.1.RELEASE</spring.version>
</properties>
....
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-core</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>${spring.version}</version>
	</dependency>

六、生命周期

1、Maven 的生命周期

Maven 有三套相互独立的生命周期, 分别是:

  • Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
  • Default Lifecycle 构建的核心部分,编译,测试,打包,安装,部署等等。
  • Site Lifecycle 生成项目报告,站点,发布站点。

再次强调一下它们是相互独立的,你可以仅仅调用 clean 来清理工作目录,仅仅调用 site 来生成站点。当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。

2、clean 生命周期

Clean 生命周期一共包含了三个阶段:

  1. pre-clean 执行一些需要在 clean 之前完成的工作
  2. clean 移除所有上一次构建生成的文件
  3. post-clean 执行一些需要在 clean 之后立刻完成的工作

3、Site 生命周期

  1. pre-site 执行一些需要在生成站点文档之前完成的工作
  2. site 生成项目的站点文档
  3. post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
  4. site-deploy 将生成的站点文档部署到特定的服务器上
  5. 这里经常用到的是 site 阶段和 site-deploy 阶段,用以生成和发布 Maven 站点,这可是 Maven 相当强大的功能, Manager 比较喜欢,文档及统计数据自动生成,很好看。

七、继承

​ 此时如果项目需要将各个模块的 junit 版本统一为 4.9, 那么到各个工程中手动修改无疑是非常不可取的。 使用继承机制就可以将这样的依赖信息统一提取到父工程模块中进行统一管理。

1、创建父工程

​ 创建父工程和创建一般的 Java 工程操作一致,唯一需要注意的是: 打包方式处要设置为 pom

2、在子工程中引用父工程

.........从当前目录到父项目的 pom.xml 文件的相对路径

代码示例:

代码语言:javascript
复制
<parent>
	<groupId>com.oy.maven</groupId>
	<artifactId>Parent</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<!-- 指定从当前子工程的 pom.xml 文件出发,查找父工程的 pom.xml 的路径 -->
	<relativePath>../Parent/pom.xml</relativePath>
</parent>

此时如果子工程的 groupId 和 version 如果和父工程重复则可以删除。

3、在父工程中管理依赖

将 Parent 项目中的 dependencies 标签,用 dependencyManagement 标签括起来

junitjunit4.9test

在子项目中重新指定需要的依赖,删除范围和版本号

​ ​junit ​junit ​

八、聚合

​ 将多个工程拆分为模块后, 需要手动逐个安装到仓库后依赖才能够生效。 修改源码后也需要逐个手动进行 clean 操作。 而使用了聚合之后就可以批量进行 Maven 工程的安装、清理工作。

1、配置聚合

​ 在总的聚合工程中使用 modules/module 标签组合, 指定模块工程的相对路径即可

代码语言:javascript
复制
<modules>
	<module>../Hello</module>
	<module>../HelloFriend</module>
	<module>../MakeFriends</module>
</modules>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-08-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Maven 基本
    • 1、自动化构建
    • 2、Maven 核心概念
    • 3、安装使用
  • 二、Maven 结构
    • 1、Maven 约定的目录结构 (cmd 中使用)
  • 三、POM
  • 四、坐标
    • 1、Maven 的坐标
    • 2、通过坐标到仓库中查找 jar 包
  • 五、依赖管理
    • 1、基本概念
    • 2、接依赖和间接依赖
    • 3、依赖的范围
    • 4、依赖的传递性
    • 5、依赖的原则: 解决 jar 包冲突
    • 6、依赖的排除
    • 7、统一管理目标 jar 包的版本
  • 六、生命周期
    • 1、Maven 的生命周期
    • 2、clean 生命周期
    • 3、Site 生命周期
  • 七、继承
    • 1、创建父工程
    • 2、在子工程中引用父工程
    • 3、在父工程中管理依赖
  • 八、聚合
    • 1、配置聚合
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档