当前位置: 首页 > news >正文

新手入门之初识maven

MAVEN基础入门

提示:java新人的学习之路记录


学习内容:

提示:了解并会初步使用maven构建管理java项目
在这里插入图片描述
Maven 是一个非常流行的 Java 项目管理和构建工具。它通过提供一套标准的构建生命周期和一组预定义的目标来简化 Java 应用程序的构建过程。Maven 使用 XML 格式的 POM(Project Object Model)文件来管理项目的构建过程、依赖管理和项目信息。

Maven 的基本概念

POM(Project Object Model)

POM 文件是 Maven 中的核心配置文件,通常命名为 pom.xml。
这个文件包含了项目的基本信息(如名称、版本)、构建设置、依赖关系、插件配置等。

生命周期(Lifecycle)

Maven 的生命周期定义了一系列可以按顺序执行的任务,这些任务被称为“目标”(goals)。
最常见的生命周期包括 clean、default 和 site 生命周期。
clean 生命周期用于清理以前的构建产物。
default 生命周期用于构建项目,包括编译、测试和打包等。
site 生命周期用于生成项目文档。

目标(Goals)

目标是生命周期中的具体任务,如 compile、test、package 等。
用户可以在命令行中指定这些目标来执行特定的操作。

插件(Plugins)

Maven 插件扩展了 Maven 的功能,提供了执行特定任务的能力。
插件可以配置在 POM 中,并且可以定义在不同的生命周期阶段执行。

仓库(Repositories)

Maven 使用仓库来存储和检索依赖项。
仓库分为本地仓库(默认存储在用户主目录下的 .m2 文件夹)、远程仓库(如中央仓库 Central Repository)和私有仓库(企业内部使用的仓库)。一般会先在本地仓库插找,再从远程仓库中查找,最后从中央仓库查找。

Maven 的优势

依赖管理:自动解析和下载项目依赖,减少了手动管理依赖的麻烦。
构建过程标准化:通过定义统一的生命周期和目标,使得构建过程更加一致。
多模块项目支持:可以方便地管理多模块项目,每个模块都可以有自己的 POM 文件。
项目信息管理:可以自动生成项目的文档和报告。

Maven 常用命令

mvn clean: 清理项目,删除之前的构建结果。
mvn compile: 编译项目的源代码。
mvn test: 运行项目的单元测试。
mvn package: 打包项目,生成 jar 或 war 文件。
mvn install: 将项目安装到本地仓库。
mvn deploy: 将项目发布到远程仓库。


Maven坐标:

Maven 坐标是用来唯一标识一个构件(Artifact)的一组元数据。每个构件都有五个主要的部分组成其坐标,这些坐标一起构成了构件的唯一标识符,不过,通常情况下,分类器和类型会被省略,除非需要特别指定。。以下是 Maven 坐标的组成部分:

GroupId(组ID):

组ID是一个唯一的标识符,通常采用组织或公司的逆向域名形式(如 com.example)表示当前maven项目隶属组织名称。它主要用于组织相关的构件。

ArtifactId(构件ID):

构件ID是项目的主要标识符,它通常反映了项目或库的功能或用途(如 myproject)。它是该maven项目的名称(通常是模块名)。

Version(版本号):

版本号用于标识构件的不同版本(如 1.0-SNAPSHOT)。Maven 支持多种版本控制方案,如快照(Snapshot)、发布(Release)等。

Classifier(分类器):

分类器是一个可选字段,用于区分同一个构件的不同变体(如 sources、javadoc 等)。分类器通常用于标识不同的构建输出,如源代码包、Javadoc 包等。

Type(类型):

类型字段指定了构件的文件类型(如 jar、war、pom 等)。最常见的类型是 jar,用于 Java 应用程序的可执行包。
提示:这里可以添加计划学习的时间

<groupId>com.example</groupId>
<artifactId>myproject</artifactId>
<version>1.0-SNAPSHOT</version>
<classifier>sources</classifier>
<type>jar</type>

依赖配置:

依赖:是指当前项目运行所需要的jar包,一个项目中可以引入多个依赖。
在 Maven 中,依赖配置(Dependency Configuration)是通过 pom.xml 文件中的 元素来定义的。依赖配置不仅指定了项目依赖的库,还定义了如何处理这些依赖项的细节
一个典型的依赖配置如下所示,对于一个新添加的依赖要刷新一下才会生效:

<!----pom中依赖的引用 --->
<dependencies><dependency><groupId>com.example</groupId><artifactId>myproject</artifactId><version>1.0-SNAPSHOT</version></dependency>
</dependencies>

更多的依赖引用方式可以再这个网站中查找:mvnrepository

依赖范围(Scope)

依赖范围(Scope)定义了依赖在构建生命周期中的适用阶段。常见的依赖范围包括:

compile:

默认范围,适用于编译阶段。这些依赖会随着应用一起被打包。

provided:

类似于 compile,但是在运行时假定由容器提供,不会被打包进最终的应用包中。

runtime:

适用于运行时阶段。这些依赖不会用于编译,但在运行时需要。

test:

仅用于测试阶段。这些依赖在编译和运行时不会包含在内。

system:

用于指定本地系统路径下的依赖,现在很少使用。

可选的配置元素

除了基本的依赖配置外,还有一些可选的配置元素,可以根据需要添加:
类型(Type): type 属性指定了依赖的类型,默认值是 jar。其他常见的类型包括 war、pom 等。

<dependency><groupId>com.example</groupId><artifactId>myproject</artifactId><version>1.0.0</version><type>war</type>
</dependency>

分类器(Classifier): 用于区分具有相同 groupId、artifactId 和 version 的不同版本,通常用于标识不同的构建输出,如源代码包、Javadoc 包等。

<dependency><groupId>com.example</groupId><artifactId>myproject</artifactId><version>1.0.0</version><classifier>javadoc</classifier><type>jar</type>
</dependency>

排除(Exclusions): exclusions 元素用于排除传递依赖中的某些库,避免不必要的依赖或冲突。

<dependency><groupId>com.example</groupId><artifactId>myproject</artifactId><version>1.0.0</version><exclusions><exclusion><groupId>log4j</groupId><artifactId>log4j</artifactId></exclusion></exclusions>
</dependency>

依赖传递

在 Maven 中,依赖传递(Dependency Transitivity)指的是当你在项目中声明了一个依赖时,这个依赖自身也可能有其他的依赖。Maven 会自动将这些间接依赖也包含到你的项目中,这就叫做依赖传递。换句话说,当你依赖于库 A 时,如果库 A 还依赖于库 B,那么库 B 也会自动成为你项目的依赖之一。
在这里插入图片描述

控制依赖传递

虽然依赖传递带来了便利,但也可能会引入不必要的依赖或导致版本冲突等问题。Maven 提供了几种方法来控制依赖传递:

**排除依赖(Exclusions):**你可以明确排除某个传递依赖,以防止它被包含进来。

<dependency><groupId>com.example</groupId><artifactId>libraryA</artifactId><version>1.0.0</version><exclusions><exclusion><groupId>com.example</groupId><artifactId>libraryB</artifactId></exclusion></exclusions>
</dependency>

上面的例子中,libraryA 依赖于 libraryB,但 Project X 明确排除了 libraryB,这样就不会将 libraryB 下载到本地仓库。

依赖范围(Scope):
通过设置依赖的范围,可以控制它在构建生命周期中的哪些阶段生效。例如,test 范围的依赖只会在测试阶段生效,而不会影响编译或运行时的行为。

<dependency><groupId>com.example</groupId><artifactId>libraryA</artifactId><version>1.0.0</version><scope>test</scope>
</dependency>

如果 libraryA 的范围被设置为 test,那么它只会出现在测试阶段,而不会被包含在最终的构建产物中。

**依赖管理(Dependency Management):**在父 POM 或者共享的 POM 中定义依赖管理,可以集中管理版本,减少重复定义。在子项目中引用依赖时,只需要声明而不必指定版本。

学习博客引用:

maven下载安装配置教程
黑马maven的idea配置
全面详解Maven的配置文件


http://www.mrgr.cn/news/54388.html

相关文章:

  • 更换镜像部署LNMP环境
  • Java爬虫:获取数据的入门详解
  • Rust小练习,编写井字棋
  • 计算PSNR, SSIM, VAMF工具
  • JVM参数
  • 中国白酒怎么喝
  • Burp Suite Professional 2024.9 for macOS x64 ARM64 - 领先的 Web 渗透测试软件
  • LeetCode 每日一题 2024/10/14-2024/10/20
  • A股反弹行情结束了吗?
  • 设计模式的六大原则详解与应用
  • Dubbo的扩展与挑战拥抱微服务与云原生
  • 力扣1011.在D天内送达包裹的能力
  • 【云原生】Docker 部署 Nacos使用详解
  • 天童教育:家长如何引导孩子表达自己
  • 高等数学 7.1 微分方程的基本概念
  • Java最全面试题->Java基础面试题->JavaWeb面试题->Git/SVN面试题
  • Spring容器详解:BeanFactory和ApplicationContext的不同
  • 在 Docker 中搭建 PostgreSQL16 主从同步环境
  • 大学生入学审核|基于springBoot的大学生入学审核系统设计与实现(附项目源码+论文+数据库)
  • # Go 语言中的 Interface 和 Struct
  • 在线图片翻译有哪些?快速识别并翻译图中文字就用它
  • 字节回应实习生破坏大模型训练:确有此事 但部分报道夸大失实
  • C# Linq常用方法
  • Django 测试指南
  • NVIDIA cuDNN
  • SpringCloud学习:Seata总结与回顾