Maven 专题(五):Maven核心概念详解(一)

董承
• 阅读 112

**Maven 的核心程序中仅仅定义了抽象的生命周期,而具体的操作则是由 Maven 的插件来完成的。**可是 Maven 的插件并不包含在 Maven 的核心程序中,在首次使用时需要联网下载。 下载得到的插件会被保存到本地仓库中。本地仓库默认的位置是:~.m2\repository。 如果不能联网可以使用我们提供的 RepMaven.zip 解压得到。

1 约定的目录结构:

约定的目录结构对于 Maven 实现自动化构建而言是必不可少的一环,就拿自动编译来说,Maven 必须 能找到 Java 源文件,下一步才能编译,而编译之后也必须有一个准确的位置保持编译得到的字节码文件。 我们在开发中如果需要让第三方工具或框架知道我们自己创建的资源在哪,那么基本上就是两种方式:
①通过配置的形式明确告诉它
②基于第三方工具或框架的约定 Maven 对工程目录结构的要求就属于后面的一种。

Maven 专题(五):Maven核心概念详解(一)

现在 JavaEE 开发领域普遍认同一个观点:约定>配置>编码。意思就是能用配置解决的问题就不编码, 能基于约定的就不进行配置。而 Maven 正是因为指定了特定文件保存的目录才能够对我们的 Java 工程进行 自动化构建。

2 POM

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

3 坐标:

3.1 几何中的坐标

[1]在一个平面中使用 x、y 两个向量可以唯一的确定平面中的一个点。
[2]在空间中使用 x、y、z 三个向量可以唯一的确定空间中的一个点。

3.2 Maven 的坐标

使用如下三个向量在 Maven 的仓库中唯一的确定一个 Maven 工程。
[1]groupid:公司或组织的域名倒序+当前项目名称
[2]artifactId:当前项目的模块名称
[3]version:当前模块的版本

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

3.3 如何通过坐标到仓库中查找 jar 包?

[1]将 gav 三个向量连起来

com.atguigu.maven+Hello+0.0.1-SNAPSHOT
1
[2]以连起来的字符串作为目录结构到仓库中查找

com/atguigu/maven/Hello/0.0.1-SNAPSHOT/Hello-0.0.1-SNAPSHOT.jar
1
※注意:我们自己的 Maven 工程必须执行安装操作才会进入仓库。安装的命令是:mvn install

4依赖

Maven 中最关键的部分,我们使用 Maven 最主要的就是使用它的依赖管理功能。要理解和掌握 Maven 的依赖管理,我们只需要解决一下几个问题:

4.1依赖的目的是什么

当 A jar 包用到了 B jar 包中的某些类时,A 就对 B 产生了依赖,这是概念上的描述。那么如何在项目 中以依赖的方式引入一个我们需要的 jar 包呢? 答案非常简单,就是使用 dependency 标签指定被依赖 jar 包的坐标就可以了。

<dependency>
<groupId>com.atguigu.maven</groupId>
<artifactId>Hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>

4.2 依赖的范围

大家注意到上面的依赖信息中除了目标 jar 包的坐标还有一个 scope 设置,这是依赖的范围。依赖的范 围有几个可选值,我们用得到的是:compile、test、provided 三个。 [1]从项目结构角度理解 compile 和 test 的区别

Maven 专题(五):Maven核心概念详解(一)

4.3 依赖的传递性

Maven 专题(五):Maven核心概念详解(一)

4.4 依赖的排除

如果我们在当前工程中引入了一个依赖是 A,而 A 又依赖了 B,那么 Maven 会自动将 A 依赖的 B 引入当 前工程,但是个别情况下 B 有可能是一个不稳定版,或对当前工程有不良影响。这时我们可以在引入 A 的时 候将 B 排除。
[1]情景举例

Maven 专题(五):Maven核心概念详解(一)

[2]配置方式

Maven 专题(五):Maven核心概念详解(一); "复制代码")

<dependency>
<groupId>com.atguigu.maven</groupId>
<artifactId>HelloFriend</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
<scope>compile</scope>
<!-- 排除不必要的依赖-->
<exclusions>

    <exclusion>               
    <groupId>commons-logging</groupId>               
    <artifactId>commons-logging</artifactId>           
    </exclusion>      

</exclusions>
</dependency>

Maven 专题(五):Maven核心概念详解(一); "复制代码")

[3]排除后的效果

Maven 专题(五):Maven核心概念详解(一)

4.5 统一管理所依赖 jar 包的版本

对同一个框架的一组 jar 包最好使用相同的版本。为了方便升级框架,可以将 jar 包的版本信息统一提 取出来 (与 JSTL 表达式类似)

<properties>

<atguigu.spring.version>4.1.1.RELEASE</atguigu.spring.version> 

</properties>

其中 atguigu.spring.version 部分是自定义标签。
[2]引用前面声明的版本号

Maven 专题(五):Maven核心概念详解(一); "复制代码")

<dependencies>
      <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>    
            <version>${atguigu.spring.version}</version> 
     </dependency> …… </dependencies> 

Maven 专题(五):Maven核心概念详解(一); "复制代码")

[3]其他用法

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 

</properties>

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

Maven 专题(五):Maven核心概念详解(一)

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
4年前
gradle配置本地mavn仓库 mavenLocal() 时的bug
最近在学习Gradle,在配置maven仓库时遇到一个很奇怪的问题。因为之前已经在自己机器上下载了一些maven的本地缓存,所有在使用gradle时想优先从本地的仓库中下载jar,查看了官方的userguide文档,发现其中有这么一段:大概意思是说使用mavenLocal()配置maven的本地仓库后,gradle默认会按以下顺序去查找本地的仓库
Stella981 Stella981
4年前
Gradle + GitHub Actions 自动发布项目至 Maven 仓库
摘要文章内容核心是使用Gradle整合GitHubActions自动化发布Java项目至Maven仓库。文章内是将项目发布至sonatype提供的仓库中。如果你需要自动化发布,或者需要将项目同步至Maven中央仓库请仔细阅读。前期准备1.可同步Maven中央仓库的门票,在IssuesSona
Stella981 Stella981
4年前
Maven配置文件中 mirror和repository的区别及中央仓库配置大全
1、Maven配置文件中mirror和repository的区别1.1repositoryrepository就是个仓库,maven里有两种仓库,LocalRepository(本地仓库)和RemoteRepository(远程仓库)。!(https://oscimg.oschina.net/oscnet/up0
Stella981 Stella981
4年前
Maven第四篇【私有仓库、上传jar包、引用私服jar包、上传本地项目到私服】
搭建私有服务器前面已经说过了,我们使用Maven的使用,如果需要导入相对应的jar包,Maven首先会在我们的本地仓库中寻找—私有仓库—中心仓库…然而,我们的本地仓库常常没有想要的jar包的,而经常去中心仓库下载这就非常浪费时间和资源了…因此我们一般都有一个私有仓库…另外有些公司都不提供外网给项目组人员,因此就不能使用mave
Stella981 Stella981
4年前
SpringBoot 引入本地或第三方Jar包
在开发过程中,我们会遇到一些Maven仓库没有的Jar包的情况,比如公司其他团队开发的Jar包等。这时我们就不能通过Pom文件引入。这里我们使用hutoolJar为例。一、使用Maven命令把Jar包添加到本地仓库(1)执行maven命令,把Jar添加到本地。mvninstall:installfileDfile/Us
Wesley13 Wesley13
4年前
Maven学习总结(六)——Maven与Eclipse整合
Maven学习总结(六)——Maven与Eclipse整合一、安装Maven插件  下载下来的maven插件如下图所示:,插件存放的路径是:E:/MavenProject/Maven2EclipsePlugin1.进入到eclipse中的dropins目录下,
Stella981 Stella981
4年前
Maven环境的搭建
1.本地仓库和apachemavenbin.zip的下载与解压<1.apachemavenbin.zip下载网址http://maven.apache.org/download.cgi2.Maven环境变量配置<1.MAVEN\_HOME!(https://oscimg.oschina.net/oscnet/9d6f3b
Stella981 Stella981
4年前
Maven使用 国内镜像配置
Maven使用国内镜像配置  Maven  setting.xml中配置<repositories<repository<idnexus</id<namelocalprivatenexus</name
Stella981 Stella981
4年前
IntelliJ IDEA使用Maven快速开发Java Web项目,并添加JFinal依赖
1.安装配置Maven插件1.下载apachemaven,配置Maven的环境变量M2\_HOMEmaven的路径,在Path的路径中添加maven的bin目录,windows为%M2\_HOME%\\bin,linux为$M2\_HOME/bin,验证maven是否安装成功mvnv    !(htt
Stella981 Stella981
4年前
Idea下maven的配置和使用
  maven的主要功能就是依赖管理,jar包仓库。和C中的NuGet仓库差不多。另外也提供打包构建,启动插件等功能。下面主要讲一下,在使用Idea开发时,maven的配置和使用。maven的安装和配置  maven(3.6.1)的下载地址:https://idlestudio.ctfile.com/fs/14960372382
Stella981 Stella981
4年前
Intellij IDEA配置Maven(内置Maven和修改本地仓库地址和阿里云中央仓库)
一.更改说明1.IntellijIDEA是有自己的Maven插件的,我们只需要配置一下就可以2.默认仓库位置为C:\\Users\\账户.m2\\repository,如果不更改仓库就会占用C盘空间,反正我的使用没多久仓库就是几个G大小了。二.配置说明1.FileSettings(Setting