maven学习笔记

本文介绍了Maven的基本概念,包括坐标、依赖范围及其管理机制。此外还详细讲解了Maven仓库的工作原理,包括本地仓库与远程仓库的设置,以及如何解决依赖解析的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Maven简介

Maven的两个核心概念:坐标和依赖。

Maven坐标:

通过一些元素进行定义,包括groupId、artifactId、version、packaging、classifier。

依赖范围:

依赖范围主要用来控制与三种classpath(编译classpath、测试classpath、运行classpath)的关系。

compile: 编译依赖范围

test: 测试依赖范围

provided: 已提供依赖范围,例如Servlet-api,编译和测试需要,但运行时由容器提供,不需重复引入

runtime: 运行时依赖

system: 系统依赖范围;主要涉及本机系统绑定

import: 导入依赖范围

Maven仓库

坐标和依赖是任何一个构件在Maven世界中的逻辑表示方式,构件的物理表示方式是文件,Maven通过仓库来统一管理这些文件。

-仓库布局 大致为:groupId/artifactId/version/artifactId-version.packaging

-仓库分类 对Maven来说,只分为本地参考和远程仓库。Maven查找构件次序:优先本地仓库,本地无则去远程仓库查找。私服是一种特殊的远程仓库,为节省带宽和时间,应在局域网内假设一个私服

本地仓库

自定义本地仓库目录位置,例如C盘空间不足等。 修改~/.m2/setting.xml,设置localRespository元素的值

<localRepository>D:/Java/apache-maven-3.0.5/local_repos</localRepository>

默认情况下,~/.m2/settings.xml文件不存在,用户需要从Maven的安装位置,复制一份%MAVEN_HOME%/conf/settings.xml拷贝再进行编辑。

中央仓库

当我们创建一个简单的Maven项目后(只需要在pom.xml配置好依赖),运行mvn clean install就可以把项目构建好,不需要我们手工下载任何jar,这全靠中央仓库的存在,它会自动从仓库下载。这个仓库的定义是在${M2_HOME}/lib/maven-2.0.10-uber.jar 里面。你可以在里面找到\org\apache\maven\project\pom-4.0.0.xml 这个文件,在这个文件里面定义了默认中央仓库的地址:http://my.repository.com/repo/path,但是大家都懂得,在国内访问某些网站速度实在不敢恭维,所以这里可以自己设置中央仓库地址,我常用的就是oschina(开源中国)的中央仓库,地址为:http://maven.oschina.net/content/groups/public,具体设置是在~/.m2/settings.xml中修改<mirrors>,具体如下:

<mirror>
      <id>nexus-osc</id>
	  <mirrorOf>*</mirrorOf>
	  <name>Nexus osc</name>
	  <url>http://maven.oschina.net/content/groups/public/</url>
    </mirror>

从仓库解析依赖的机制

1、当依赖范围是system时,Maven直接从本地文件系统解析构件

根据依赖坐标计算仓库路径后,优先尝试直接从本地仓库寻找构件

本地不存在,如果依赖版本是显式的发布版本构件,如1.2、1.2-beta-1等,则遍历所有远程仓库

2、如果依赖的版本是RELEASE或者LATEST,则基于更新策略读取所有远程仓库的元数据groupId/artifactId/maven-metadata.xml,将其与本地仓库的对应元数据合并后,计算出RELEASE或者LATEST真实值,然后基于这个真实值检查本地和远程仓库

3、如果依赖的版本是SNAPSHOT,则基于更新策略读取所有远程仓库的元数据groupId/artifactId/version/maven-metadata.xml,与本地元数据合并后得到最新快照版本的值,然后检查本地仓库,或者从远处仓库下载

4、如果最后解析得到的构件版本是时间戳格式的快照,如1.4.1-20091104.121450-121,则复制其时间戳格式的文件至非时间戳格式,如SNAPSHOT,并使用该非时间戳格式的构件。

当依赖的版本不明晰的时候,如RELEASE/LATEST/SNAPSHOT,Maven需要基于更新远程仓库的更新策略来检查更新

仓库搜索服务

使用Maven进行日常开发,常见问题就是如何寻找需要的依赖,我们可能只知道需要使用类库的项目名称,但添加Maven依赖需要提供确切的Maven坐标;我们可以通过使用仓库搜索服务来根据关键字得到Maven坐标。

MVNrepository

Sonatype Nexus

Maven设置

1、全局设置,修改%MAVEN_HOME%/conf/settings.xml

2、用户设置(在Linux多用户情况下),拷贝%MAVEN_HOME%/conf/settings.xml到~.m2\settings.xml,修改此文件,在用户范围内定制Maven的行为。

~/.m2目录

1、在用户目录下可以发现.m2文件夹。默认情况,该文件夹下放置了Maven本地仓库.m2/repository,所有Maven构件被存储在本地此目录下,以方便在多个项目间重用。

2、在Linux多用户环境下,用户需要复制%MAVEN_HOME%/conf/settings.xml到~.m2\settings.xml,这是一条最佳实践。mvn help:system #打印当前Java系统属性和环境变量

设置HTTP代理

编辑settings.xml,添加代理配置如下:

<proxy>
 <id>optional</id>
 <active>true</active>
 <protocol>http</protocol>
 <username>proxyuser</username>
 <password>proxypass</password>
 <host>proxy.host.net</host>
 <port>80</port>
 <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
</proxy>

Maven生成可执行Jar包(pom.xml配置)

maven有两种生成可执行jar包的插件,能够自动加载依赖包。分别为 maven-assembly-plugin 和appassembler-maven-plugin。

appassembler-maven-plugin 的优势是能够自动生成window和linux的启动脚本

maven-assembly-plugin 生成jar包后需要执行 java -jar **.jar命令运行jar包。

Maven项目骨架

根目录中放置pom.xml

src/main/java目录中,放置项目的主代码

src/main/resources目录中,放置项目的的资源文件,如配置文件.ini/.xml/*.propeties

src/test/java目录中,放置项目的测试代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值