Maven的基本使用

参考自黑马程序员在b站发布的视频教程

一.Maven的安装和基本配置

1.下载地址

https://maven.apache.org/download.cgi
在这里插入图片描述

2.复制下载的压缩包到安装目录,解压

在这里插入图片描述

Maven目录结构:

  • \bin:
    • 该目录包含了 mvn 运行的脚本,这些脚本用来配置Java命令,准备好 classpath 和相关的Java系统属性,然后执行Java命令。
    • 其中 mvn 是基于 UNIX 平台的 shell 脚本,mvn.bat 是基于 Windows 平台的 bat 脚本。在命令行输入任何一条 mvn 命令时,实际上就是在调用这些脚本。
    • 该目录还包含了 mvnDebug 和 mvnDebug.bat 两个文件,同样,前者是 UNIX 平台的 shell 脚本,后者是 Windows 平台的 bat 脚本。打开文件可以看到,两者基本是一样的,只是 mvnDebug 多了一条 MAVEN_DEBUG_OPTS 配置,其作用就是在运行 Maven 时开启debug,以便调试 Maven 本身。
    • 该目录还包含 m2.conf 文件,这是 classworlds 的配置文件。
  • \boot:
    • 该目录存放着Maven的类加载器 plexus-classworlds框架,相对于默认的 java 类加载器,它提供了更丰富的语法以方便配置,Maven 使用该框架加载自己的类库。
  • \conf:
    • 这个目录存放着Maven的配置文件 settings.xml。直接修改该文件,就能在机器上全局地定制 Maven 的行为。
  • \lib:
    • 该目录包含了所有 Maven 运行时需要的jar包,Maven 本身是分模块开发的,因此该目录下可以看到诸如 maven-core-3.0.jar、maven-model-3.0.jar 之类的文件。
    • 此外,这里还包含一些 Maven 用到的第三方依赖,如 common-cli-1.2.jar、commons-lang-2.6.jar 等。
  • LICENSE.txt
    • 记录了 Maven 使用的软件许可证Apache License Version 2.0。
  • NOTICE.txt
    • 记录了 Maven 包含的第三方软件。
  • README.txt
    • 包含了 Maven 的简要介绍,包括安装需求及如何安装的简要指令等。

3.配置环境变量(JAVA_HOME 和 MAVEN_HONE):

在这里插入图片描述
在这里插入图片描述

4.本地仓库配置

  1. 在安装目录下新建本地仓库文件夹
    ==通常命名为==

  2. 打开 \conf\settings.xml文件,配置本地仓库。
    – 在第50行左右位置

  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->
<!--配置本地仓库路径-->  
<localRepository>D:\Emvironment\apache-maven-3.8.5\maven-repo</localRepository>

5.配置国内镜像仓库

– 在150行左右位置

  <mirrors>
    <!-- mirror
     | Specifies a repository mirror site to use instead of a given repository. The repository that
     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
     |
    <mirror>
      <id>mirrorId</id>
      <mirrorOf>repositoryId</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://my.repository.com/repo/path</url>
    </mirror>
     -->
    <!--配置阿里的镜像仓库--> 
    <mirror>
      <!--此镜像的唯一标识符,用来区分不同的mirror元素-->
      <id>nexus-aliyun</id>
      <!--对哪种仓库进行镜像,简单来说就是替代哪个仓库-->
      <mirrorOf>central</mirrorOf>
      <!--镜像名称-->
      <name>Nexus aliyun</name>
      <!--镜像URL-->
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </mirror>

  </mirrors>

二.Maven基础概念

1.什么是Maven

Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)

  • POM (Project Object Model) :项目对象模型

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V6kAsf9N-1658193459661)(E:\Picture\TyporaPictures\5352.png)]

2.Maven的作用

  1. 项目构建:提供标准的、跨平台的自动化项目构建方式
  2. 依赖管理:方便快捷的管理项目依赖的资源(jar包) ,避免资源间的版本冲突问题
  3. 统一开发结构:提供标准的、统一的项目结构

3.仓库

用于存储资源,包含各种jar包

  • 仓库的分类:
    • 本地仓库:本地计算机存储资源的仓库,连接远程仓库获取资源;
    • 远程仓库:非本机的仓库,为本机仓库提供资源。
      • 中央仓库:Maven团队维护,存储所有资源的仓库
      • 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源
  • 私服的作用:
    • 保存具有版权的资源,包含购买或自主研发的jar
      • 中央仓库的jar都是开源的,不能存储具有版权的jar
    • 一定范围内共享,仅对内开放,不对外共享。

4.坐标

Maven中坐标用于描述仓库中资源的位置。

Central Repository: (maven.org)

  • Maven坐标的组成:
    • groupld:定义当前Maven项目隶属组织名称(通常是域名反写,例如: org.mybatis)
    • artifactld:定义当前Maven项目名称(通常 是模块名称,例如CRM、SMS)
    • version:定义当前项目版本号.
    • packaging:定义该项目的打包方式
  • Maven坐标的作用
    • 使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成

三.创建Maven项目

  • Maven项目目录结构

    ├─ project
    │    └─ module
    │        └─ src
    │            ├─ pom.xml
    │            │
    │            ├─ main
    │            │    ├─ java
    │            │    │    └─ com
    │            │    │        └─ sun
    │            │    │            └─ Demo.java
    │            │    │
    │            │    └─ resources
    │            └─ test
    │                 ├─ java
    │                 │    └─ com
    │                 │        └─ sun
    │                 │            └─ DemoTest.java
    │                 │
    │                 └─ resources
    
  • 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>
    
      <groupId>com.sun</groupId>
      <artifactId>project-java</artifactId>
      <version>1.0</version>
      <packaging>jar</packaging>
    
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.12</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
      
    </project>
    

    配置文件详解请移步此处:http://t.csdn.cn/jB5Pz

    感谢原文作者

  • Maven项目构建命令:

    目录创建好后,接下来开始构建项目。

    Maven构建命令使用mvn开头,后面添加功能参数,可以一次执行多个命令,使用空格分隔。

    命令作用
    mvn compile#编译,生成target文件
    mvn clean#清理,删除target文件
    mvn test#测试,执行单元测试,其中包含了compile命令
    mvn package#打包,打包,其中包含了test命令
    mvn install#安装到本地仓库,只能是jar包,其中包含了package命令

1.手动创建Maven工程

  • 创建工程

    mvn archetype:generate
    -DgroupId={project-packaging} 
    -DartifactId={project-name} 
    -DarchetypeArtifactId=maven-archetype-quickstart
    -DinteractiveMode=false
    
  • 创建java工程

    mvn archetype:generate -DgroupId=com.sun -DartifactId=java-project -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=0.0.1-snapshot -DinteractiveMode=false
    
  • 创建web工程

    mvn archetype:generate -DgroupId=com.sun -DartifactId=web-project -DarchetypeArtifactId=maven-archetype-webapp -Dversion=0.0.1-snapshot -DinteractiveMode=false
    

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OXa3uF4K-1658193459664)(E:\Picture\TyporaPictures\123123123.png)]

2.IDEA生成Maven工程

步骤:

  1. 新建空工程(maven-project),设置SDK
  2. settings搜索Maven,设置Maven home directory、settings.xml、maven-repo
  3. ProjetStructure ==> 新建Moudles
    • 点击Maven(Create from archetype暂未勾选)==> Next
    • GroupId和artifactId统称“坐标”,GroupId为项目组名称,通常为域名倒写,artifactId为项目唯一标识符,实际项目的名称,Version默认。
    • 项目创建完后,检查项目结构,将其补充完整。Maven项目创建完成!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iDvvyaSS-1658193459666)(E:\Picture\TyporaPictures\789789.png)]

2.1 IDEA&Maven使用基本介绍
  • 界面右侧的Maven项目管理目录

  • 使用Maven导包(以junit为例)

    1. 打开pom.xml文件

    2. <dependencies>
              <!--导入Junit-->
              <dependency>
                  <groupId>junit</groupId>
                  <artifactId>junit</artifactId>
                  <version>4.12</version>
                  <scope>test</scope>
              </dependency>
      </dependencies>
      
    3. 点击文件编辑框右上角的刷新按钮

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lE4xRu3o-1658193459668)(E:\Picture\TyporaPictures\m09.png)]

  • 尝试使用Maven项目构建命令:

    1. 编写Demo和DemoTest,双击执行“Test”,可以看到生成了target

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-htDCJsiJ-1658193459669)(E:\Picture\TyporaPictures\123987.png)]

    2. 双击执行“clean”,可以看到target消失。

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vNWAvBde-1658193459670)(E:\Picture\TyporaPictures\123988.png)]

  • 若需要打断点调试?

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UzZqs5si-1658193459671)(E:\Picture\TyporaPictures\9870.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7uPXR8nx-1658193459672)(E:\Picture\TyporaPictures\1122.png)]

2.2 IDEA使用骨架创建Maven工程

步骤:

  1. 新建空工程(maven-project),设置SDK
  2. settings搜索Maven,设置Maven home directory、settings.xml、maven-repo
  3. ProjetStructure ==> 新建Moudles
    • 点击Maven,勾选reate from archetype,选择org.apache.maven.archetypes:maven-archetype-quickstart ==> Next
    • GroupId和artifactId统称“坐标”,GroupId为项目组名称,通常为域名倒写,artifactId为项目唯一标识符,实际项目的名称,Version默认。
    • 检查Maven、settings.xml、本地仓库的路径,无误点击Finish。
    • 同上补全目录结构。

3.IDEA使用骨架创建web项目

  1. 新建空工程(maven-project),设置SDK

  2. settings搜索Maven,设置Maven home directory、settings.xml、maven-repo

  3. ProjetStructure ==> 新建Moudles

    • 点击Maven,勾选reate from archetype,选择org.apache.maven.archetypes:maven-archetype-webapp ==> Next

    • GroupId和artifactId统称“坐标”,GroupId为项目组名称,通常为域名倒写,artifactId为项目唯一标识符,实际项目的名称,Version默认。

    • 检查Maven、settings.xml、本地仓库的路径,无误点击Finish。

    • 补全目录结构。(web目录结构如下:)

3.1 安装tomcat插件启动web项目
  • 在pom.xml中添加:

      <!--构建-->
      <build>
        <!--设置插件-->
        <plugins>
          <!--具体的插件配置-->
          <plugin>
            <!-- https://mvnrepository.com/artifact/org.apache.tomcat.maven/tomcat7-maven-plugin -->
              <groupId>org.apache.tomcat.maven</groupId>
              <artifactId>tomcat7-maven-plugin</artifactId>
              <version>2.2</version>
              <configuration>
                <!--设置端口-->
                <port>80</port>
                <!--设置虚拟路径-->
                <path>/</path>
              </configuration>
    
          </plugin>
        </plugins>
      </build>
    
  • 刷新,点击右侧maven项目管理目录,可以看到web项目的Plugins目录下出现了tomcat插件,双击tomcat7:tun即可运行项目,进入浏览器访问控制台给出的路径即可访问到webapp目录下的文件。

4. pom文件基本解读

<?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">
  <!--指定pom的模型版本-->
  <modelVersion>4.0.0</modelVersion>

  <!--组织id-->
  <groupId>com.sun</groupId>
  <!--项目id-->
  <artifactId>web01</artifactId>
  <!--版本号:release 完成版 ,snapshot 开发版-->
  <version>1.0-SNAPSHOT</version>
  <!--打包方式:web项目打包为war,java工程打包为jar-->
  <packaging>war</packaging>

  <!--设置当前项目所需的依赖-->
  <dependencies>
    <!--具体的依赖-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <!--构建-->
  <build>
    <!--设置插件-->
    <plugins>
      <!--具体的插件配置-->
      <plugin>
        <!-- https://mvnrepository.com/artifact/org.apache.tomcat.maven/tomcat7-maven-plugin -->
          <groupId>org.apache.tomcat.maven</groupId>
          <artifactId>tomcat7-maven-plugin</artifactId>
          <version>2.2</version>
          <configuration>
            <!--设置端口-->
            <port>80</port>
            <!--设置虚拟路径-->
            <path>/</path>
          </configuration>
      </plugin>
    </plugins>
  </build>

</project>

四.依赖管理

1.添加依赖的基本方式

  • <dependencies>标签中配置<dependency>,

      <!--设置当前项目所需的依赖-->
      <dependencies>
        <!--具体的依赖-->
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.11</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
          <version>1.2.14</version>
        </dependency>
      </dependencies>
    

2.依赖传递

  • 依赖具有传递性
    • 直接传递:当前项目中通过依赖配置建立的依赖关系
    • 间接传递:被资源的资源如果依赖其他资源,当前项目同样依赖其他资源。
    • 特殊优先:当同级配置了相同资源的不同版本,后配置的会覆盖先配置的。

比如:在java01的配置文件中导入以下命令:

<dependencies
    <dependency>
        <groupId>com.sun</groupId>
        <artifactId>web01</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>

可以看到web01的pom文件里的依赖被导入进java01,而此时web01是察觉不到的。

3.可选依赖

当自己的某个依赖不想被下一级项目得到时,可以加入<optional>true</optional>标签。当后面有项目导入自己时,将不导入添加此标签的依赖。

  • 可选依赖指:主动对外隐藏当前所依赖的资源–不透明

    	<dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
            <!--默认false,没有变化,改为true则隐藏-->
            <optional>true</optional>
        </dependency>
    

4.排除依赖

  • 排除依赖指:主动断开依赖的资源,被排除的资源无需指定版本–不需要

        <dependencies>
            <dependency>
                <groupId>com.sun</groupId>
                <artifactId>web01</artifactId>
                <version>1.0-SNAPSHOT</version>
                
                <exclusions>
                    <!--排除web01的log4j的依赖-->
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies
    

5.依赖范围

依赖的jar可以通过scope标签设定其范围默认情况可以在任何地方引用

  • 作用范围:

    • 主程序范围有效(main文件夹范围内)
    • 测试程序范围有效(test文件夹范围内)
    • 是否参与打包(package指令范围内)
    scope主代码测试代码打包范例
    compile (默认)YYYlog4j
    testYjunit
    providedYYservlet-api
    runtimeYjdbc
  • 依赖范围的传递性:

    带有依赖范围的资源在进行传递时,作用范围将会受到影响。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-auTKxhgB-1658193459673)(E:\Picture\TyporaPictures\459789.png)]

五.生命周期与插件

1.Maven的生命周期

Maven构建生命周期描述的是一次构建过程经历了多少个事件。

Maven对项目构建的生命周期划分为3套:

  1. clean:清理工作
    • pre-clean :执行一些需要在clean之前完成的工作
    • clean :移除所有上一次构建生成的文件
    • post-clean :执行一些需要在clean之后立刻完成的工作
  2. default:核心工作,如编译,测试,打包, 部署等
    • validate(校验) 校验项目是否正确并且所有必要的信息可以完成项目的构建过程。
    • initialize(初始化) 初始化构建状态,比如设置属性值。
    • generate-sources(生成源代码) 生成包含在编译阶段中的任何源代码。
    • process-sources(处理源代码) 处理源代码,比如说,过滤任意值。
    • generate-resources(生成资源文件) 生成将会包含在项目包中的资源文件。
    • process-resources (处理资源文件) 复制和处理资源到目标目录,为打包阶段最好准备。
    • compile(编译) 编译项目的源代码。
    • process-classes(处理类文件) 处理编译生成的文件,比如说对Java class文件做字节码改善优化。
    • generate-test-sources(生成测试源代码) 生成包含在编译阶段中的任何测试源代码。
    • process-test-sources(处理测试源代码) 处理测试源代码,比如说,过滤任意值。
    • generate-test-resources(生成测试资源文件) 为测试创建资源文件。
    • process-test-resources(处理测试资源文件) 复制和处理测试资源到目标目录。
    • test-compile(编译测试源码) 编译测试源代码到测试目标目录.
    • process-test-classes(处理测试类文件) 处理测试源码编译生成的文件。
    • test(测试) 使用合适的单元测试框架运行测试(Juint是其中之一)。
    • prepare-package(准备打包) 在实际打包之前,执行任何的必要的操作为打包做准备。
    • package(打包) 将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件。
    • pre-integration-test(集成测试前) 在执行集成测试前进行必要的动作。比如说,搭建需要的环境。
    • integration-test(集成测试) 处理和部署项目到可以运行集成测试环境中。
    • post-integration-test(集成测试后) 在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。
    • verify (验证) 运行任意的检查来验证项目包有效且达到质量标准。
    • install(安装) 安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。
    • deploy(部署) 将最终的项目包复制到远程仓库中与其他开发者和项目共享。
  3. site:产生报告,发布站点等。
    • pre-site 执行一些需要在生成站点文档之前完成的工作
    • site 生成项目的站点文档
    • post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
    • site-deploy 将生成的站点文档部署到特定的服务器上

2.插件

插件使用说明查看官网:https://maven.apache.org/plugins/index.html

  • 插件与生命周期内的阶段绑定,在执行到对应生命周期是执行对应的插件功能;
  • 默认maven在各个生命周期上绑定有预设的功能;
  • 通过插件可以自定义其他功能。

示例: 使用source插件

<build> 
    <plugins> 
        <plugin> 
            <groupId>org.apache.maven.plugins</groupId> 
            <artifactId>maven-source-plugin</artifactId>
            <version>2.2.1</version> 
            <executions> 
                <execution> 
                    <goals> 
                        <!--对main的源码进行打包-->
                        <goal>jar</goal>
                        <!--对test的源码进行打包-->
                        <goal>test-jar</goal>
                    </goals>  
                    <!--运行指定的阶段执行这个插件-->
                    <phase>generate-test-resources</phase>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

野比猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值