重新认识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来构建.通过学习,我已经掌握了基本的搭建过程,写下基础文章为而后的深入学习奠定基础. 首先说一下这篇文章的主要 ...
随机推荐
- [Python3] 022 面向对象 第二弹
目录 6. 面向对象的三大特性 6.1 封装 6.1.1 私有 private 6.1.2 受保护 protected 6.1.3 公开 public 6.2 继承 6.2.1 继承的概念与作用 6. ...
- UML类图及类之间关系
1.UML基本介绍 UML:统一建模语言,是一种用于软件系统分析和设计的语言工具 2.UML图 UML图分类: 用例图 静态结构图:类图,对象图,包图,组件图,部署图 动态行为图:交互图,状态图,活动 ...
- CodeChef Sereja and GCD
Sereja and GCD Problem code: SEAGCD Submit All Submissions All submissions for this problem ar ...
- Spring Data Redis实战之提供RedisTemplate
参考: http://www.cnblogs.com/edwinchen/p/3816938.html 本项目创建的是Maven项目 一.pom.xml引入dependencies <depen ...
- cronsun任务管理器部署文档
一.cronsun介绍 1)cronsun产生的背景 大量的 crontab 任务散布在各台服务器,带来了很高的维护成本 任务没有按时执行,甚至失败了很久才发现,需要重试或排查 crontab 分散在 ...
- ssh-agent - 认证代理
总览 (SYNOPSIS) ssh-agent [-a bind_address ] [-c | -s ] [-t life ] [-d ] [command [args ... ] ] ssh-ag ...
- 【串线篇】Mybatis拓展之MBG
MBG-逆向工程 一.介绍 MBG:MyBatis Generator:代码生成器: MyBatis官方提供的代码生成器:帮我们逆向生成: 正向: table----javaBean---BookDa ...
- 如何使用Excel绘制甘特图
摘自:http://www.mifengtd.cn/articles/how-to-create-a-gantt-chart-in-excel.html 再造<优秀的时间管理和项目管理工具> ...
- Linux复制命令cp进阶
cp -a:连同属性和权限也一起复制 cp -i:如果不带该参数,默认覆盖同名文件而不会提醒. cp -u:只拷贝符合以下条件的文件到目标目录:目标目录中不存在的文件或目标目录中文件版本较旧的文件. ...
- 【转】从phpMyAdmin批量导入Excel内容到MySQL(亲测非常简洁有效)
今天做项目遇到需要用phpMyAdmin批量导入Excel内容到MySQL数据库.分析了我的踏坑经历并且总结一最便捷的一套导入数据的方法,非常实用简洁: 1.修改Excel表的数据,使得Excel中的 ...