Maven 学习

视频学习:https://www.bilibili.com/video/BV1Fz4y167p5?p=3&spm_id_from=pageDriver

1. 主要内容

2. Maven 的简介

2.1 简介

​ Maven 作为 Apache 组织中的一个颇为成功的开源项目,Maven 主要服务于基本 java 平台的项目创建,依赖管理和项目信息管理

2.2 项目创建

​ 用软件的方法将繁琐重复的工作进行自动化,使得软件的构建可以像全自动流水线一样,只需要一条简单的命令,就能够自动完成,很快就能得到最终结果

2.3 项目构建工具

Ant 构建

​ 最早的构建工具,基于 IDE,但 XML 脚本编写格式让 XML 文件特别大,对工程构建过程中的过程控制特别好

Maven

​ 项目对象模型,通过其描述信息来管理项目的构建,报告和文档的软件管理工具,它填补了 Ant 缺点,Maven 第一次支持了从网络上下载的功能,仍然采用 xml 作为配置文件格式。Maven 专注的是依赖管理,使用 java 编写

Gradle

​ 结合以上两个的优点,继承了 Ant 的灵活和 Maven 的生命周期管理,最后被 google 作为了 Android 御用管理工具,它最大的区别是不用 XML 作为配置文件格式,采用了 DSL 格式,使得脚本更加简洁

2.4 Maven 的四大特性

2.4.1 依赖管理系统

​ 依赖管理系统 jar 包管理,jar 包升级时修改配置文件即可,可用 groupId、artifactId、version 组成的 Coordination(坐标)唯一标识一个依赖。

​ 任何基于 Maven 构建的项目自身也必须定义这三项属性,生成的包可以是 jar 包,也可以是 war 包,如下依赖引用:

<dependency>
    <groupId>javax.servlet</groupId>	
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
</dependency>

坐标属性的理解

​ Maven 坐标为各种组件引入了秩序,任何一个组件都必须明确定义自己的坐标

groupId

​ 定义当前 Maven 项目隶属的实际项目-公司名称。

artifactId

​ 该元素定义实际项目中的一个 Maven 模块-项目名。推荐使用实际项目名称作为 artifactId 的前缀

version

​ 该元素定义 Maven 项目当前所处的版本

2.4.2 多模块构建

​ 在 Maven 中需要定义一个 parent POM 作为一组 module 的聚合 POM,在该 POM 中可以使用 标签来定义一组子模块,parent POM 不会有什么实际构建产出,而 parent POM 中的 build 配置以及依赖配置都会自动继承给子 module

2.4.3 一致的项目结构

​ 制定了一套项目目录结构作为标准的 java 项目结构,解决不同的 IDE 带来的文件目录不一致问题

2.4.4 一致的构建模型和插件机制

3. Maven 的安装配置和目录结构

3.1 Maven 的安装配置

3.1.1 JDK 的版本

​ JDK 版本 1.7 及以上版本

3.1.2 下载 Maven

​ 下载地址:https://maven.apache.org/download.cgi

3.1.3 配置 Maven 环境变量

  • 将解压后的 Maven 的根目录配置到系统环境变量中 MAVEN_HOME
  • 把 bin 目录配置到系统变量 path 中

注意:maven 解压后存放的目录不要包含中文和空格

3.1.4 检查 Maven 是否安装成功

​ 打开 cmd,执行 mvn -v

3.2 Maven 目录结构

3.2.1 创建一个文件夹作为项目的根目录

​ 创建 pom.xml 文件

<?xml version="1.0" encoding="utf-8"?>
<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">
 
    <!-- 模型版本 -->
    <modelVersion>4.0.0</modelVersion>
    <!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.companyname.project-group,maven会将该项目打成的jar包放本地路径:/com/companyname/project-group -->
    <groupId>com.xxxx</groupId>
 
    <!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
    <artifactId>maven</artifactId>
 
    <!-- 版本号 -->
    <version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>
	
	<name>maven</name>
	<url>http://maven.apache.org</url>
	
	
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<!-- 这里只能写大的版本号12,不能具体到 12.0.1-->
		<maven.compiler.source>12</maven.compiler.source>
		<maven.compiler.target>12</maven.compiler.target>
		<maven.compiler.compilerVersion>12</maven.compiler.compilerVersion>
	</properties>
	
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
	
</project>

3.2.2 编写主函数

package com.xxxx.demo01


public class Hello {
	public static void main(String[] args) {
		System.out.println("Hello Maven");	
	}
	
}

3.2.3 cmd 下编译并运行

​ 进入项目目录,使用 cmd

  1. 编译 java 文件

    mvn complie

  2. 执行 main 方法

    mvn exec:java -Dexec.mainClass="com.xxxx.demo01.Hello"

  3. 为了更好的下载依赖,可将镜像更改为 阿里镜像,另可修改默认仓库位置

    1.1 修改默认仓库位置
    maven-->conf-->settings.xml
    <localRepository>F:/Java/m2/repository</localRepository>
    注意:仓库位置为本机的指定的目录,记得改成 "/"
    1.2 更换镜像
    <mirror>
          <id>nexus-aliyun</id>
          <mirrorOf>central</mirrorOf>
          <name>Nexus aliyun</name>
          <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
    

    编译不成功,可能出现的问题:

    • JDK 环境配置有问题

    • 代码编写时,类里面没有设置包名(如果编译时类没加包名,执行时也不需要加包名)

    • 报 Fatal error compiling: 错误: 无效的目标发行版:12.0.1 错误

      解决:将 版本号改成 12 即可

4. Maven 命令

Maven 的命令格式如下:

mvn [plugin-name]:[goal-name]

执行 plugin-name 插件的 goal-name 目标

4.1 常用命令


注意:运行 maven 命令,首先需要定位到 maven 项目的目录,也就是 pox.xml 文件所在的目录,否则,需要通过参数来指定项目的目录

5. IDEA 编辑器集成 Maven 环境

5.1 设置 Maven 版本

选择 File --> Other Settings(全局配置) -- > Settings for New Projects --> 搜索 Maven

  • 修改 Maven home directory
  • 修改 user settings file

6. Maven 项目的创建

6.1 创建 Java 项目

6.1.1 新建项目

​ 选择 File --> New --> Project --> maven --> quickstart

6.1.2 编译项目

​ 选择 edit configurations --> + --> maven

6.2 启动 web 项目

  1. 创建 web 项目与创建 java 项目步骤基本一致,区别在于选择 Maven 模板 (web 项目选择 webapp)

  2. 修改 JDK 为当前版本

  3. 添加 web 部署的插件

    ​ 在 build 标签中添加 plugins 标签

    ​ Jetty 插件 和 tomcat 插件

7. Maven 仓库的基本概念

​ 对于 Maven 来说,仓库只分为两类:本地仓库和远程仓库

​ 当 Maven 根据坐标寻找构件时,会首先查看本地仓库,如果本地仓库存在,则直接使用;如果本地没有,Maven 则会去远程仓库查找,发现需要的构件时之后,下载到本地仓库再使用,如果都没有,则会报错。

​ 远程仓库分为三种:中央仓库、私服、其他公共库

​ 中央仓库是默认配置下,Maven 下载 jar 包的地方

​ 私服是另一种特殊的远程仓库,为了节省带宽和时间,应该在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库。内部的项目还能部署到私服上供其他项目使用。

​ 在 Maven 项目目录下,没有诸如 libs/ 这样用来存放依赖文件的目录。当 Maven 在执行编译或测试时,如果需要使用依赖文件,它总是基于坐标使用本地仓库的依赖文件。

​ 默认情况下,每个用户在自己的用户目录下都有一个路径名 .m2/repository/ 的仓库目录,此仓库默认在 c 盘,可通过 maven 配置文件 conf 目录下 settings.xml 来指定仓库路径

7.1 中央仓库

​ 默认的远程仓库

7.2 私服

​ 私服是一个特殊的远程仓库,假设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的 maven 用户使用,当 maven 需要下载构件时,它去私服当中找,如果私服没有,则从外部远程仓库下载,并缓存在私服上,再为 maven 提供。

7.3 其他公共库

​ 常用的阿里云仓库配置

<mirror>
    <id>nexus-aliyun</id>
    <mirrorof>Nexus aliyun</mirrorof>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

8. Maven 环境下构建多模块项目

​ 使用 maven 提供的多模块构建的特性完成 maven 环境下多个模块的项目的管理与构建

  • 模块 maven_parent -- 基模块(pom)
  • 模块 maven_dao -- 数据库的访问层,如 jdbc 操作 (jar)
  • 模块 maven_service -- 项目的业务逻辑层 (jar)
  • 模块 maven_controller -- 用来接收请求,相应数据 (war)

9. Maven 的打包操作

  • 建立对应的目录结构
  • 添加 Profile 配置
  • 设置资源文件配置
  • 执行打包操作

10. Maven 依赖的基本概念

10.1 依赖的基本配置

​ 根元素 project 下的 dependencies 可以包含多个 dependence 元素,以声明多个依赖。

​ 每个依赖应该包含以下元素:

  1. groupId,artifactId,version:依赖的基本坐标
  2. Type:依赖的类型,大部分情况下不需要声明。默认值为 jar
  3. Scope:依赖范围
  4. Optional:标记依赖是否可选
  5. Exclusion:用来排除传递性依赖
posted @ 2021-02-22 12:08  -费费  阅读(110)  评论(0编辑  收藏  举报