重新认识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来构建.通过学习,我已经掌握了基本的搭建过程,写下基础文章为而后的深入学习奠定基础. 首先说一下这篇文章的主要 ...
随机推荐
- java注解编程@since 1.8
一.基本元注解: @Retention: 说明这个注解的生命周期 RetentionPolicy.SOURCE -> 保留在原码阶段,编译时忽略 RetentionPolicy.CLASS -& ...
- zabbix 微信告警配置
作者信息 邮箱:sijiayong000@163.com Q Q:601566386 Zabbix 微信告警 摘要:Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是 ...
- jsp页面注册验证问题
<script type="text/javascript"> $(function(){ // 错误消息提示 var msg = "${msg}" ...
- JavaScript 中的 Function.prototype.bind() 方法
转载自:https://www.cnblogs.com/zztt/p/4122352.html Function.prototype.bind()方法 bind() 方法的主要作用就是将函数绑定至某个 ...
- TensorFlow学习——入门篇
本文主要通过一个简单的 Demo 介绍 TensorFlow 初级 API 的使用方法,因为自己也是初学者,因此本文的目的主要是引导刚接触 TensorFlow 或者 机器学习的同学,能够从第一步开始 ...
- php中的花括号使用详解
1.简单句法规则(用花括号界定变量名,适用于PHP所有版本,是php系统设定): $a = 'flower'; echo "She received some $as" ...
- geometry_msgs的ros message 类型赋值
test_custom_particles.cpp // // Created by gary on 2019/8/27. // #include <ros/ros.h> #include ...
- Linux就该这么学10学习笔记
参考链接:https://www.linuxprobe.com/chapter-10.html 网站服务程序 第1步:把光盘设备中的系统镜像挂载到/media/cdrom目录. [root@linux ...
- Java虚拟机(JVM)与垃圾回收机制(GC)的详解
一.JVM结构 根据<java虚拟机规范>规定,JVM的基本结构一般如下图所示: 从左图可知,JVM主要包括四个部分: 1.类加载器(ClassLoader):在JVM启动时或者在类运行时 ...
- HTML5 canvas绘制图形
demo.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...