Maven系列学习(二)Maven使用入门
Maven使用入门
通过上一节的学习,我们已经了解和配置好了Maven,接下来需要编写代码了
1.POM(Project Object Model,项目对象模型)
和Make的Makefile类似,Maven项目的核心是pom.xml,定义了项目的基本信息,描述项目如何构建,声明依赖等
<?xml version="1.0" encoding="UTF-8"?> <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>team.kirohuji</groupId><artifactId>Test</artifactId><version>0.0.1-SNAPSHOT</version><name>Test</name><packaging>war</packaging> </project>
这是一个基本的pom.xml文件的内容
groupId,artifactId和version这三行,这三个元素定义了一项目的基本的坐标(Coordinate),
groupId:定义当前Maven项目的实际项目
artifactId:定义实际项目中的一个实际的Maven项目(模块)
version: 当前版本号,直接回车,默认是1.0-SNAPSHOT
packaging:Maven项目的打包方式
name元素声明了一个Maven项目的项目名称,这个不是必要的
classifier:用来帮助定义构建输出的一些附属构件,不能直接定义项目的classifier,因为附属构件不是项目直接默认生成的,而是由附加的插件帮助生成
项目的名称的一般规律也是:artifactId-version [-classifier].packing,[-classifier]表示可选
2.依赖的配置
<?xml version="1.0" encoding="UTF-8"?> <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>team.kirohuji</groupId><artifactId>tset3</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>tset3</name><dependencies><dependency><groupId>javax</groupId><artifactId>javaee-web-api</artifactId><version>7.0</version><scope>provided</scope></dependency></dependencies> </project>
一个依赖一般可以包含以下一些元素
<project>...<dependencies><dependency><groupId>...</groupId><artifactId>... </artifactId><version>...</version><type>...</type><scope>...</scope><optional>...</optional><exelusions><exclusion>...</exclusion>...</exelusions></dependency></dependencies>
groupId,artifactId和version:依赖的坐标
type:依赖的类型,对应项目坐标定义的packing,一般不必声明,其默认值是jar
scope:依赖的范围
optional:标记依赖是否可选
exclusions:用来排除传递性依赖
大部分依赖声明只包含基本坐标即可
(1).依赖的范围
Maven在编译项目主代码的时候需要使用一套classpath,其次Maven在编译和执行测试的时候会使用另一套calsspath
依赖范围就是用来控制这三种classpath(编译,测试,运行)的关系,Maven有以下几种依赖范围:
a. compile:编译依赖范围,默认使用此依赖范围,使用此依赖,对编译,测试,运行三种classpath都有效
b. test:测试依赖范围,即对测试classpath有效
c. provided:已提供依赖范围.对于编译和测试classpath有效,但运行时无效
d. runtime:运行时依赖范围:使用此依赖范围的Maven依赖,对于测试和运行classpath有效,但在编译主代码时无效
e. system:系统依赖范围:该依赖和provided依赖范围完全一直,但是,使用system范围的依赖时必须通过systemPath元素显式地指定依赖文件的路径,由于此类依赖不是通过Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此谨慎使用,systemPath元素可以引用环境变量
f.import(Maven 2.0.9及以上):导入依赖范围
(2).传递性依赖
1.假设 A 依赖 B , B 依赖 C ,我们称 A 对 B 是第一直接依赖, B 对 C 是第二直接依赖, A 对 C 是传递依赖
2.依赖调解:两个原则:路径最近优先原则和第一声明者优先
3.<optiona>可以声明是否实现依赖特性true或false
4.排除依赖即使用<exclusions>元素进行配置
5.Maven会自动解析所有项目的直接依赖和传递性依赖,进行一系列的配置,最后得到的那些依赖称为已解析依赖(Resolved Dependency),可以运行
mvn dependency:list
命令查看已解析依赖
3.仓库
Maven通过仓库来统一管理这些文件,在Maven的世界中,任何一个依赖,插件或者项目构建的输出,都可以称为构件,任何一个构建都有唯一的一个坐标,这便是Maven的仓库布局方式,Maven仓库是基于简单文件系统存储的
(1)本地仓库和远程仓库
对于Maven来说,仓库分为两种:本地仓库和远程仓库,首先Maven会根据坐标寻找构件,首先查看本地仓库,如果没有此构件,则会在远程仓库中寻找,有的话,就会下载到本地仓库,还有其它特殊的仓库:中央仓库和私服,其他公共库
(2)本地仓库
在每个用户的目录下都有一个路径名为.m2/repository/仓库路径,可以在~/.m2/settings.xml中设置localRepository元素的值为想要的仓库地址:
<settings><localRepository>/home/zyd/Desktop/Repository</localRepository> </settings>
一般~/.m2/中没有settings.xml的,用户需要从Maven安装目录复制/conf/settings.xml文件到~/.m2/下,再进行文件配置
一个构件只有在本地仓库中之后,才能由其他Maven项目使用,最常见的方式是从远程仓库下载到本地仓库,还有方式是把本地项目的构件安装到Maven仓库中,比如本地项目A在项目中执行
mvn clean instal
首先是清理target文件夹,二进制文件就不需要加入仓库中,然后Install插件的install目标将项目的构建输出文件安装到本地仓库
(3)远程仓库
安装好Maven后,一般本地仓库目录是不存在的,当用户使用了第一条Maven命令之后,Maven才会创建本地仓库,然后根据配置和需要,从远程仓库中下载构件到本地仓库
(4)中央仓库
由于原始的本地仓库是空的,Maven必须知道至少一个可用的远程仓库,才能执行Maven命令,中央仓库就是一个默认的远程仓库,Maven 的安装文件自带了中央仓库的配置,在Maven文件夹的lib里的maven-model-builder-3.5.0.jar,打开访问路径/org/apache/maven/model/pom-4.0.0.xml,文件配置如下:
<repositories><repository><id>central</id><name>Central Repository</name><url>https://repo.maven.apache.org/maven2</url><layout>default</layout><snapshots><enabled>false</enabled></snapshots></repository></repositories>
包括这段配置的文件是所有Maven项目都会继承的超级POM
(5)私服
私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用
(6)远程仓库的配置
很多时候,默认的中央仓库无法满足项目的需求,可能项目需要的构件存于另外一个远程仓库,比如JBoss Maven仓库,这时可以在POM中配置该仓库,代码如下:
<project>...<repositories><repository><id>jboss</id><name>JBoss Repository</name><url>http://repository.jboss.com/maven2/</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots><layout>default</layout></repository></repositories>... </project>
在repositories元素下,可以使用repository子元素声明一个或多个远程仓库,release和snapshots元素比较重要,它们用来控制Maven对于发布版构件和快照版构件的下载,表示开启JBoss仓库的发布版本下载支持
对于releases和snapshots来说,除了enabled,它们还包含另外两个子元素updatePolicy和checksumPolicy:
<snapshots><enabled>true</enabled><updatePolicy>daily</updatePolicy><checksumPolicy>ignore</checksumPolicy> </snapshots>
元素updatePolicy用来配置Maven从远程仓库检查更新的频率,默认的值是daliy,表示Maven每天检查一次,其他的可用值包括:never--从不检查;always--每次构建都检查更新;interval:
X--每隔X分钟检查一次更新(X为任意整数)
元素checksumPolicy用来配置Maven检查检验和文件的策略,checksumPolicy的值默认的warn时,Maven会在执行构建输出警告信息,其他可用的值包括:fail--Maven遇到校验和错误就让构建失败;ignore--使Maven完全忽略校验和错误
(7)远程仓库的认证
大部分远程仓库无须认证就可以访问,但有时候出于安全考虑,我们需要提供认证信息才能访问一些远程仓库,管理员可以为每个仓库提供了一组用户名以及密码,认证是在settings.xml文件中
<settings> ...<servers><server><id>my-proj</id><username>repo-user</username><password>repo-pwd</password></server></servers>... </settings>
Maven使用settings.xml文件中并不显而易见的servers元素以及其server子元素配置仓库认证信息
(8)部署至远程仓库
私服的一大作用是部署第三方构件,包括组织内部生成构件以及一些无法从外部仓库直接获取的构件,无论是日常开发中生成的构件,还是证实版本发布的构件,都需要部署到仓库中,供其他团队成员使用.Maven除了能对项目进行编译,测试,打包之外,还能将项目生成的构建部署到仓库中,首先,需要编辑项目的pom.xml文件,配置distributionManagement元素
<project> ...<distributionManagement><repository><id>proj-releases</id><name>Proj Release Repository</name><url>http://192.168.1.100/content/repositories/proj-releases</url></repository><snapshotRepository><id>proj-snapshots</id><name>Proj Snapshot Repository</name><url>http://192.168.1.100/content/repositories/proj-snapshots</url></snapshotRepository></distributionManagement>... </project>
前者表示发布版本构件的仓库,后者表示快照版本的仓库,配置完成
mvn clean deploy
Maven就会将项目构件部署到配置对应的远程仓库,如果项目当前的版本是快照版本,则会部署到快照版本仓库地址
(9)镜像
如果仓库A可以提供仓库B存储的所有内容,那么就可以认为A是B的一个镜像,就是任何一个可以从仓库A获得的构件,都能从它的镜像中获得,比如中央仓库和国内仓库的镜像,由于地理位置的因素,该镜像往往能够提供比中央仓库更快的服务,因此可以配置Maven使用该镜像来代替中央仓库,编辑settings.xml
<settings>...<mirrors><mirror><id>maven.net.cn</id><name>one of the central mirrors in China</name><url>http://maven.net.cn/content/groups/public/</url><mirrorOf>central</mirrorOf></mirror></mirrors>... </settings>
该<mirrorOf>的值为central,表示改配置为中央仓库的镜像
转载于:https://www.cnblogs.com/kirohuji/p/6954117.html
Maven系列学习(二)Maven使用入门相关推荐
- maven详解-maven入门
这一节不用eclipse来创建maven项目,我们自己创建 一 Maven概念 二 maven安装 2.1 http://maven.apache.org/download.cgi下载 2.2 解压缩 ...
- Maven学习总结(二)——Maven项目构建过程练习
2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(二)--Maven项目构建过程练习 上一篇只是简单介绍了一下maven入门的一些相关知识,这一篇主要是体验 ...
- Maven学习(一)——Maven入门
为什么80%的码农都做不了架构师?>>> 一.Maven的基本概念 Maven(翻译为"专家","内行")是跨平台的项目管理工具.主要服 ...
- Maven学习(1) - Maven入门
home index:http://maven.apache.org/ download:http://maven.apache.org/download.cgi install: http://ma ...
- Maven项目的介绍、入门搭建
Maven项目的介绍.入门搭建 一.什么是Maven项目 Maven 是 Apache 组织下的一个跨平台的项目管理工具,它主要用来帮助实现项目的构建.测试.打包和部署.Maven 提供了标准的软件生 ...
- Maven(二):常用命令、依赖管理
相关阅读: Maven(一):安装与环境配置.使用Maven搭建web项目 Maven(二):常用命令.依赖管理 Maven(三):将web项目的war包热部署到远程Tomcat服务器 Maven(四 ...
- maven学习:maven 的入门
2.maven 的入门 到目前为止,我们已经大概了解并安装好了Maven,现在,我们开始创建一个最简单的Hello World项目. 2.1 在Idea创建maven项目 创建一个Maven项目也十分 ...
- JavaFlink系列之一:Maven程序搭建及Java入门案例多种写法
一.Flink项目依赖配置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns:xsi ...
- Maven系列二setting.xml 配置详解
文件存放位置 全局配置: ${M2_HOME}/conf/settings.xml 用户配置: ${user.home}/.m2/settings.xml note:用户配置优先于全局配置.${use ...
最新文章
- 数据统计之日分类商品访问量
- T-SQL Enhancement in SQL Server 2005[上篇]
- java浮点数原理,浮点型数据存储原理
- 前端学习(2363):发送get请求
- 清空文件夹里面的所有文件和文件夹
- 【ElasticSearch】 ElasticSearch 读取 流程
- Spring : Spring 切面优先级
- IBM人工智能项目Watson旧金山开设新总部
- SONY重拳出击,开始涉足移动领域----Playstation Mobile必然崛起
- Excel查找、替换与定位
- hdu 2037 今年暑假不AC 贪心)
- 在Quartus中调用Modelesim时仿真出现“Error:Failed to find design unit work“可能的解决方法
- Android App开机自启动
- python量化股票源码_使用Python写一个量化股票提醒系统
- 苹果零日漏洞利用市售800万欧元
- JS实现刷新_重新加载页面
- 面试中经常被问到Java引用类型原理,带你深入剖析
- IC 后端仿真: process corner 和 PVT
- 在线考试系统_管理员端
- 3.28~~3.29
热门文章
- python爬虫实战-python爬虫实战一:分析豆瓣中最新电影的影评
- python与excel做数据可视化-用Python进行数据可视化的10种方法
- python推荐书-python的书推荐
- python散点图拟合曲线-python散点图拟合
- python基础教程教材-最好的Python入门教材是哪本?
- php和python写爬虫-可以写爬虫的那么多,为什么只有python火了?
- python绘制动态模拟图-如何利用Python动态模拟太阳系运转
- monty python life of brian-电影Life of Brian 万世魔星
- python画图简单代码-简单画图 - python代码库 - 云代码
- python安装教程mac-Mac 上安装python3——手把手教程