Maven进阶

1.pom.xml文件

就像 Make 的 MakeFile、Ant 的 build.xml 一样,Maven 项目的核心是 pom.xml。POM( Project Object Model,项目对象模型 ) 定义了项目的基本信息,用于描述项目如何构建、声明项目依赖等。

2.坐标
2.1.坐标的概念

在 Maven 中坐标是构件的唯一标识,Maven 坐标的元素包括 groupIdartifactIdversion、packaging、classifier。上述5个元素中,groupId、artifactId、version 是必须定义的,packaging 是可选的(默认为 jar)。

2.2.坐标的意义

Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范。拥有了统一规范,就可以把查找工作交给机器。

2.3.坐标的含义

groupId:组织标识,一般为:公司网址的反写+项目名

artifactId:项目名称,一般为:项目名-模块名

version:版本号 形式为0.0.1-SNAPSHOT:

第一个 0 表示大版本号,第二个 0 表示分支版本号,第三个 0 表示小版本号

SNAPSHOT -- 快照版本,ALPHA -- 内侧版本,BETA -- 公测版本,RELEASE -- 稳定版本,GA -- 正式发布

packaging:打包的方式,如:pom, jar, maven-plugin, ejb, war, ...

clissifier:用来帮助定义构件输出的一些附属构件。

3.依赖
3.1.依赖的意义

当编写Java代码时,我们总是需要一些库。例如,做单元测试我们需要JUnit库。对于更大的项目,我们可能需要创建自己的库并在不同的部分使用它的项目。

我们可以在POM文件中的dependencies元素内指定依赖关系。

3.2.依赖的使用

例如我们的项目需要进行单元测试,则需要使用到 junit-4.9.jar 包,使用maven引用该依赖的方式如下:

属性说明:

三维坐标:引用依赖包的三维坐标,用来定位该依赖包;

scope: 控制该依赖包在什么情况下会被加到 classpath 中;

3.3.依赖范围

Maven项目在开发工程中有三套classpath

主代码:main下面的都是主代码在编译的时候的依赖

测试代码:test下是测试代码编译的时候的依赖

运行时:main代码在运行的时候对包的依赖

依赖范围的使用,通过在引用第三方依赖时的<scope></scope>标签进行设置,例如:

共 6 种 scope,包括:compileprovidedruntimetest 、system、import。例如上图的junit,只在测试中使用,则选择test即可,默认为compile

Compile:编译依赖范围。默认使用此依赖范围,其下的maven依赖,对于编译,测试,运行classpath都有效。

Test:测试依赖范围。只对测试classpath有效,编译主代码或运行项目时无法使用此依赖。典型例子如junit。

Provided:已提供依赖范围。其对于编译与测试classpath有效,运行时无效。如在web开发时,只有在编译和测试时才用到servlet-api,将其设置为此范围,在运行时servlet-api由web容器提供,无须依赖。并且在打war包时,此范围的依赖不会打在WEB-INF/lib下。

Runtime:运行时依赖范围。与provided相对,运行时classpath有效。典型例子如jdbc(编写是接口规范,运行是提供具体实现类需要jar包)。

相关推荐
数智化转型推荐官20 分钟前
2026统一身份管理系统五大发展趋势解读
java·运维·微服务
看菜鸡互23 分钟前
探索用 SlideML 让大模型生成 PPT 的实验方法
java·运维
程序员张32 小时前
SpringBoot集成BCrypt密码加密库
java·spring boot·后端
闲猫2 小时前
Spring AI Agentic 模式(第1部分):Agent Skills——模块化、可复用的能力
java·人工智能·spring
源图客2 小时前
云途物流API开发-鉴权认证(Java)
java·网络·python
liguojun20253 小时前
篮球馆自动计时收费系统:从规则配置到自动结算的全流程拆解
java·大数据·运维·人工智能·物联网·1024程序员节
952363 小时前
RabbitMQ-基础操作
java·spring boot·分布式·后端·spring·rabbitmq
卓怡学长4 小时前
w266基于spring boot + vue 圣地延安美食乐享系统
java·数据库·vue.js·spring boot·spring·intellij-idea
C++、Java和Python的菜鸟4 小时前
第7章 Java高级技术
java·开发语言
程序员佳佳4 小时前
模型网关灰度不是调百分比:把放量、观测和回滚做成账本
java·数据库·人工智能·redis·gpt·aigc·embedding