重新认识Maven
PS:第一次接触maven大约是两年前吧,隐约记得之前都是人工寻找并下载很多jar,放在项目的lib中(表示太年轻,没有接触过Ant或者其他类似的工具,就不找别人写的比较了)。懒人永远有着自己的小聪明,我都是搭建完一个项目,保存最原始的项目框架作为备份,以便于再次搭建项目的时候寻找jar,即使现在使用maven我也保留了这个习惯,因为可以减少很多重复的配置。缺点就是慢慢的会忘记都需要配置什么,每次都是找以前的。
从三个方向重新认识maven:
- maven是什么;
- maven的配置;
- maven结合开发工具的使用;
1.maven是什么:
这个问题官网上有很直接的回答。http://maven.apache.org/what-is-maven.html(官网介绍),对于纯英文的资料两种处理方式,第一种:寻找快速开始(Quick start)等快速找到代码的部分。基本上就是教程了;另一种就是自己慢慢看资料结合一些翻译工具,硬着头皮慢慢来。
简单的说明一下:
maven是一个用来创建和管理基本java项目的工具。直白的说,就是创建和管理jar包的。方便引入第三方包。为什么说方便引入第三方包呢?使用maven创建的项目都会有一个pom.xml文件,只要在这个文件中配置你要引用的jar包就可以了,是很方便。但是我第一次用的时候并没有觉得很方便,因为在配置文件中需要配置一个<dependency><groupId>XXX</groupId><artifactId>YYY</artifactId><version>ZZZ</version></dependency>才算是完成了一个包的引用,问题是我怎么知道XXX,YYY,ZZZ怎么填?还不是要去网上找,一样的麻烦。事实上有专门查pom引入的网站(https://mvnrepository.com/),这个东西在网上很好搜。但是你要下载的jar,因为网上的版本太多,变得反而不好找。更重要的问题是,这样能够很好的同一版本,提交和移植项目都变的好简单。相当于每次移植项目的时候,maven在旁边跟你说“没事,第三方的jar包在我这里,我会帮你带着的”。习惯于它并依赖上它。
2.maven的配置
maven配置很简单,只有三个配置文件:
- conf\logging\simplelogger.properties,从文件路径名称能看出来是日志相关的配置(并不常用,可以说基本上不会修改)
- conf\toolchains.xml,从文件路径名称可以看出工具链(也不常用,正常情况下可以不用修改)
- conf\settings.xml,从文件可以看出这是一个比较全面的配置文件(常用的配置文件)
- ${user.home}/.m2/settings.xml,这个配置文件和3是等价的,不同的是,这个是用户级别,3是全局级别。
关于maven的配置文件详情:
a.本地仓库配置(默认路径:${user.home}/.m2/repository):<localRepository></localRepository>
b.是否与用户交互(默认:true):<interactiveMode>true</interactiveMode>
c.插件组列表(默认:<pluginGroup>org.apache.maven.plugins</pluginGroup>和<pluginGroup>org.codehaus.mojo</pluginGroup>):<pluginGroups></pluginGroups>
c.1包含:<pluginGroup></pluginGroup>元素
d.代理配置(默认:无;配置多个下,默认激活第一个使用):<proxies></proxies>
d.1包含(一个代理):<proxy></proxy>
d.1.1包含: <id>optional</id>(不同代理的唯一标识,可通过配置profile id更换使用的代理)
d.1.2包含: <active>true</active>(该代理是否激活使用状态)
d.1.3包含: <protocol>http</protocol>(代理协议)
d.1.4包含: <username>proxyuser</username>(代理认证用户名,在需要认证的时候使用)
d.1.5包含: <password>proxypass</password>(代理认证密码,在需要恩正的时候使用)
d.1.6包含: <host>proxy.host.net</host>(代理主机名)
d.1.7包含: <port>80</port>(代理端口号)
d.1.8包含: <nonProxyHosts>local.net|some.host.com</nonProxyHosts> (不被代理的主机名列表,使用|[竖线]分割或使用,[逗号]分割)
e.服务端相关认证配置:<servers></servers>
e.1包含(一个服务器,第一种认证方式):<server></server>
e.1.1包含: <id>deploymentRepo</id>(使用用户名密码,认证ID)
e.1.2包含: <username>repouser</username>(用户名)
e.1.3包含: <password>repopwd</password>(密码)
e.2或者(一个服务器,第二种认证方式):<server></server>
e.2.1或者: <id>siteServer</id>(使用私钥和口令,认证ID)
e.2.2或者: <privateKey>/path/to/private/key</privateKey>(私钥)
e.2.3或者: <passphrase>optional; leave empty if not used.</passphrase>(口令)
f.镜像列表配置:<mirrors></mirrors>
f.1包含(一个镜像):<mirror></mirror>
f.1.1包含: <id>mirrorId</id>(不同镜像的唯一标识)
f.1.2包含: <mirrorOf>repositoryId</mirrorOf>(原始仓库id,即镜像映射的仓库id)
f.1.3包含: <name>Human Readable Name for this Mirror.</name>(镜像名称)
f.1.4包含: <url>http://my.repository.com/repo/path</url>(连接镜像的URL)
g.环境参数配置列表:<profiles></profiles>
g.1包含(一个环境配置):<profile></profile>
g.1.1包含: <id>jdk-1.4</id>(环境配置ID)
g.1.2包含: <activation></activation>(激活某个对应的组件或配置)
g.1.2.1包含: <jdk>1.4</jdk>
g.1.3包含: <repositories></repositories>(仓库列表)
g.1.3.1包含(一个仓库):<repository></repository>
g.1.3.1.1包含: <id>jdk14</id>(远程仓库唯一标识)
g.1.3.1.2包含: <name>Repository for JDK 1.4 builds</name>(远程仓库名称)
g.1.3.1.3包含: <url>http://www.myhost.com/maven/jdk14</url>(远程仓库URL)
g.1.3.1.4包含: <layout>default</layout>(用于定位和排序构件的仓库布局类型:default(默认)或者legacy(遗留))
g.1.3.1.5包含: <snapshotPolicy>always</snapshotPolicy>(快照策略)
h.激活参数配置列表:<activeProfiles></activeProfiles>
h.1包含(一个激活列表): <activeProfile>alwaysActiveProfile</activeProfile>(要激活的配置)
相关概念:
仓库的概念:
本地仓库:maven在本地存储构件的地方(本地存放jar的目录)
远程仓库:
私服:局域网内的远程仓库。
中央仓库:公网上的远程仓库。
其他公共仓库:基本同中央仓库。
本地仓库、私服、代理、中央仓库、镜像服务器之间的关系:
本地仓库是用来服务我们本地maven项目的,里面存储了相关的jar,当一个maven项目需要一个jar包时会通过项目pom文件中配置的groupId和artifactId在本地仓库中寻找,有则调用。没有则去远程仓库下载。
远程仓库的私服是最优先的,如果配置了私服,则会优先在私服中下载,如果私服中存在,则下载;如果没有,再请求中央仓库。
为什么要配置私服,一般我们不会直接连接中央仓库,有以下几点原因:
a.节省外网带宽
b.加速Maven的构建(默认中央仓库服务器在国外)
c.部署第三方构件
d.提高稳定行,增强控制
所以我们可以配置镜像,在网上可以找到一些国内的中央仓库的镜像,配置镜像,同样可以下载到所需要的jar包。
这其中的代理配置,类似于网络代理。我们凡是要访问网络资源,都可以通过配置代理去访问,这个好处有以下几点:
a.有时候不能直接访问,使用代理服务器访问
b.隐藏IP地址等
一个简单的比喻:
比如我们今天要用电脑打游戏(一个项目),需要一台mac(jar包),我们先在家(本地仓库)里找,有就开始玩(引用编译);没有我们需要去自己的店(私服)里去拿。
自己的店(私服)里有,则拿回家(本地仓库),就可以开始玩了(引用编译);店(私服)里没有,我们需要去厂家(中央仓库)进货。但我们一般不会直接找厂家(中央仓库),可能时因为自己的店(私服)太小或者厂家(中央仓库)在国外,那我们就找国内的代理商(镜像服务器)。
代理商(镜像镜像服务器)有,我们就进会自己的店(私服),然后拿回家(本地仓库),开始玩(引用编译),如果没有,代理商(镜像服务器)会去找。
那么我们在找代理商(镜像服务器)或者厂家(中央仓库)的时候可以找个中间人或者代购(代理),中间人或者代购(代理)帮我们去找我们想要的mac(jar包),代理商(镜像服务器)和厂家(中央仓库)就不会找到是谁买的mac(jar包)。
3.maven结合开发工具的使用
基本的环境变量的配置:
【我的电脑】[右击]->【属性】->【高级系统设置】->【环境变量】
分别配置"M2_HOME"和"Path"
M2_HOME:(maven的安装路径)
Path:(%M2_HOME%\bin)【注意:不要新建,在原Path后添加,注意分号间隔】
测试maven配置:
控制台输入“mvn -v”,显示版本号及相关,则配置正常(如下图)
在IDEA上使用maven
file->Settings->Build,Execution,Deployment->Build Tools->Maven,如下图
在eclipse上使用maven
Window->Preferences->Maven->User Settings->Installations->Add(右侧),如下图
Window->Preferences->Maven->User Settings->User Settings,如下图
以上整体的将maven相关总结了一下,如有错误,敬请指出。
重新认识Maven的更多相关文章
- 【分享】标准springMVC+mybatis项目maven搭建最精简教程
文章由来:公司有个实习同学需要做毕业设计,不会搭建环境,我就代劳了,顺便分享给刚入门的小伙伴,我是自学的JAVA,所以我懂的.... (大图直接观看显示很模糊,请在图片上点击右键然后在新窗口打开看) ...
- 理解Maven中的SNAPSHOT版本和正式版本
Maven中建立的依赖管理方式基本已成为Java语言依赖管理的事实标准,Maven的替代者Gradle也基本沿用了Maven的依赖管理机制.在Maven依赖管理中,唯一标识一个依赖项是由该依赖项的三个 ...
- 【微框架】Maven +SpringBoot 集成 阿里大鱼 短信接口详解与Demo
Maven+springboot+阿里大于短信验证服务 纠结点:Maven库没有sdk,需要解决 Maven打包找不到相关类,需要解决 ps:最近好久没有写点东西了,项目太紧,今天来一篇 一.本文简介 ...
- 安装eclipse的maven插件
我们团队用maven来管理项目需要的库文件,其实以前都没听过maven,第一次接触这个,师兄要我直接去装下这个,开始以为还挺简单的,没想到中间遇到了一些小麻烦,现在把我成功安装maven的过程分享下, ...
- MAVEN学习-第一个Maven项目的构建
MAVEN安装成功之后就可以进行项目的构建和管理了: 为什么要用maven进行项目的构建和管理? 对于初学者来说一个最直接的也是最容易里的优点在于JAR包的管理,相对于以前开发一个项目的时候我们需要用 ...
- Maven 代理设置
在maven的安装目录下 %MAVEN_HOME%/conf/setting.xml 中进行设置 <proxies> <!-- proxy | Specificatio ...
- spring maven pom.xml设置
spring pom.xml设置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns= ...
- maven依赖查询地址
http://search.maven.org/#search%7Cga%7C1%7C
- maven 中snapshot版本和release版本的区别
maven中的仓库分为两种,snapshot快照仓库和release发布仓库.snapshot快照仓库用于保存开发过程中的不稳定版本,release正式仓库则是用来保存稳定的发行版本.定义一个组件/模 ...
- Maven多模块,Dubbo分布式服务框架,SpringMVC,前后端分离项目,基础搭建,搭建过程出现的问题
现互联网公司后端架构常用到Spring+SpringMVC+MyBatis,通过Maven来构建.通过学习,我已经掌握了基本的搭建过程,写下基础文章为而后的深入学习奠定基础. 首先说一下这篇文章的主要 ...
随机推荐
- Reinforcement Learning for Self Organization and Power Control of Two-Tier Heterogeneous Networks
R. Amiri, M. A. Almasi, J. G. Andrews and H. Mehrpouyan, "Reinforcement Learning for Self Organ ...
- vue手写轮播
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 《JAVA设计模式》之桥接模式(Bridge)
在阎宏博士的<JAVA与模式>一书中开头是这样描述桥梁(Bridge)模式的: 桥梁模式是对象的结构模式.又称为柄体(Handle and Body)模式或接口(Interface)模式. ...
- HTML5+Canvas手机拍摄,本地压缩上传图片
最近在折腾移动站的开发,涉及到了一个手机里面上传图片.于是经过N久的折腾,找到一个插件,用法如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...
- Matplotlib基础使用
matplotlib 一.Matplotlib基础知识 Matplotlib中的基本图表包括的元素 x轴和y轴 axis 水平和垂直的轴线 x轴和y轴刻度 tick 刻度标示坐标轴的分隔,包括最小刻度 ...
- python最新字符串学习总结
names="hello word" len() title() formate 格式化 split join find() replace() startswith() ends ...
- TiKV集群配置记录
环境:两台ubuntu 18.04 pc tidb / pd: 192.168.1.150 tikv: 192.1681.1.151 主要参考https://pingcap.com/docs-cn/d ...
- hadoop工作流调度系统
常见工作流调度系统 Oozie, Azkaban, Cascading, Hamake 各种调度工具特性对比 特性 Hamake Oozie Azkaban Cascading 工作流描述语言 XML ...
- html的q标签、blockquote标签
九层之台,起于垒土 一.<q> 定义和用法 <q> 标签定义短的引用.浏览器经常在引用的内容周围添加引号. <html> <body> <p> ...
- 不小心执行 rm -f,该如何恢复?
每当我们在生产环境服务器上执行rm命令时,总是提心吊胆的,因为一不小心执行了误删,然后就要准备跑路了,毕竟人不是机器,更何况机器也有 bug,呵呵. 那么如果真的删除了不该删除的文件,比如数据库.日志 ...