【Maven从入门到精通】 02-Maven 的核心概念:POM、坐标、依赖

发布时间:2022-07-02 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了【Maven从入门到精通】 02-Maven 的核心概念:POM、坐标、依赖脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

笔记来:Maven零基础入门教程(一套轻松搞定maven工具)

目录
  • Maven 的核心概念:POM、坐标、依赖
    • 1、POM
    • 2、坐标
    • 3、仓库
      • 3.1、仓库的分类
      • 3.2、仓库的内容
    • 4、第二个 Maven 工程
    • 5、依赖(初步介绍)
      • 5.1、依赖的基本操作
      • 5.2、依赖的范围
        • compile 范围依赖
        • test 范围依赖
        • PRovided 范围依赖

Maven 的核心概念:POM、坐标、依赖

1、POM

  • POMProject Object Model,项目对象模型
    • 类似DOMDocument Object Model,文档对象模型
  • ② pom.XMl 对于 Maven 工程是核心配置文件,与构建过程相关的一切设置都在这个文件中进行配置
    • 重要程度相当于 web.xML 对于动态 Web 工程

2、坐标

数学中的坐标

  1. 在平面上,使用X、Y两个向量可以唯一的定位平面中的任何一个点
  2. 在空间中,使用X、Y、Z三个向量可以唯一的定位空间中的任何一个点

Maven 的坐标

使用下面三个参数GAV在仓库中唯一定位一个 Maven 工程

  • G——groupId公司或组织域名倒序 + 项目名

    <groupId>com.vectorx.maven</groupId>
    
  • A——artifactId:模块名

    <artifactId>Hello</artifactId>
    
  • V——version:版本号

    <version>1.0.0-sNAPSHOT</version>
    

Maven 工程的坐标与仓库中路径的对应关系

Maven 工程的坐标:

<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.0.RELEASE</version>

仓库中路径:

orgspringframeworkspring-core4.0.0.RELEASEspring-core-4.0.0.RELEASE.jar

3、仓库

3.1、仓库的分类

  • 本地仓库:本地部署的仓库目录,为当前脑所有 Maven 工程服务

  • 远程仓库

    • 私服:搭建在局域网中,为局域网范围内的所有 Maven 工程服务

      【Maven从入门到精通】 02-Maven 的核心概念:POM、坐标、依赖

    • 中央仓库:搭建在 internet 上,为全世界所有 Maven 工程服务

    • 中央仓库镜像:搭建在各大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快的响应用户请求

3.2、仓库的内容

  • Maven 自身所需的插件
  • 第三方框架或工具的 Jar 包
  • 自己开发的 Maven 工程

4、第二个 Maven 工程

目录结构

【Maven从入门到精通】 02-Maven 的核心概念:POM、坐标、依赖

pom.xml

<?xml version="1.0"?>
<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.vectorx.maven</groupId>
    <artifactId>HelloFriend</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>HelloFriend</name>
    <dePEndencies>
        <dependency>
            <groupId>junIT</groupId>
            <artifactId>junit</artifactId>
            <version>4.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.vectorx.maven</groupId>
            <artifactId>Hello</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
</project>

HelloFriend

public class HelloFriend {
  public String sayHello2Friend(String name) {
    Hello hello = new Hello();
    String str = hello.sayHello(name) + " I am " + this.getMyName();
    System.out.println(str);
    return str;
  }

  public String getMyName() {
    return "John";
  }
}

HelloFriendTest

public class HelloFriendTest {
  @Test
  public void testHelloFriend() {
    HelloFriend helloFriend = new HelloFriend();
    String results = helloFriend.sayHello2Friend("world");
    assertEquals("Hello world! I'm John", results);
  }
}

此时,我们运行mvn compile命令,能否成功呢?

【Maven从入门到精通】 02-Maven 的核心概念:POM、坐标、依赖

我们发现,编译失败了:

Failed to execute goal on project HelloFriend: Could not resolve dependencies for project com.vectorx.maven:HelloFriend:jar:0.0.1-SNAPSHOT: Could not find artifact com.vectorx.maven:Hello:jar:0.0.1-SNAPSHOT

即:无法解决 HelloFriend 包中的依赖,找不到 Hello 的 Jar 包

根据前面所学知识,我们知道

  • 执行的 Maven 命令需要用到某些插件时,Maven 核心程序会首先在本地仓库中查找
  • 如果在本地仓库中找不到需要的插件,会自动到中央仓库下载。如果此时无法连接外网,则构建失败

而我们这里的Hello本身是自定义的 Maven 工程,其中的坐标也是自定义的,中央仓库中是几乎不可能有的

我们希望的是 Maven 核心程序在本地仓库中寻找,并且能够找到,这就要了解下 Maven 依赖的相关知识了

5、依赖(初步介绍)

5.1、依赖的基本操作

Maven 解析依赖信息时会到本地仓库中查找被依赖的 jar 包

对于我们自己开发的 Maven 工程,使用mvn install命令安装后就可以进入仓库

》》》我们实操一遍

【Maven从入门到精通】 02-Maven 的核心概念:POM、坐标、依赖

【Maven从入门到精通】 02-Maven 的核心概念:POM、坐标、依赖

我们注意到,install命令,将工作空间中 Hello 的 Jar 包安装到了默认的用户家目录下

[INFO] Installing D:workspaceNOTE_MavenDemoHellotargetHello-0.0.1-SNAPSHOT.jar to C:UsersArchimedes.m2repositorycomvectorxmavenHello.0.1-SNAPSHOTHello-0.0.1-SNAPSHOT.jar
[INFO] Installing D:workspaceNOTE_MavenDemoHellopom.xml to C:UsersArchimedes.m2repositorycomvectorxmavenHello.0.1-SNAPSHOTHello-0.0.1-SNAPSHOT.pom

我们打开自己的用户家目录,确实发现了 Hello 的 Jar 包已经安装到了我们的本地仓库中

【Maven从入门到精通】 02-Maven 的核心概念:POM、坐标、依赖

好,现在我们再次对 HelloFriend 进行编译,看下是否会成功

【Maven从入门到精通】 02-Maven 的核心概念:POM、坐标、依赖

果然不负众望,编译成功了!

5.2、依赖的范围

大家注意到上面的依赖信息中除了目标 jar 包的坐标还有一个scope设置,这是依赖的范围

依赖的范围有几个可选值,我们用得到的是:compiletestprovided

compile 范围依赖

  • 对主程序是否有效:有效
  • 对测试程序是否有效:有效
  • 是否参与打包部署:参与

test 范围依赖

  • 对主程序是否有效:无效
  • 对测试程序是否有效:有效
  • 是否参与打包部署:不参与

provided 范围依赖

  • 对主程序是否有效:有效
  • 对测试程序是否有效:有效
  • 是否参与打包部署:不参与

compile &amp; test 对比

【Maven从入门到精通】 02-Maven 的核心概念:POM、坐标、依赖

compile & provided 对比

【Maven从入门到精通】 02-Maven 的核心概念:POM、坐标、依赖

小结

依赖范围 compile test provided
对主程序是否有效 &#x2714;️ ✔️
对测试程序是否有效 ✔️ ✔️ ✔️
是否参与打包部署 ✔️

脚本宝典总结

以上是脚本宝典为你收集整理的【Maven从入门到精通】 02-Maven 的核心概念:POM、坐标、依赖全部内容,希望文章能够帮你解决【Maven从入门到精通】 02-Maven 的核心概念:POM、坐标、依赖所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。