Maven
〇、Maven的作用
- 项目构建;
(用maven命令可以很简单地去建立、打包、部署一个项目)
- 项目管理;
(Maven是基于项目对象模型,可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具)
- Jar包的依赖和下载;
(只要在配置文件中写好相关配置,它会自动地去jar包库里获取jar包)
一、环境搭建
1.去官网下载好Maven的文件,是一个压缩包(其中src结尾的是maven的源代码,bin结尾的是maven编译好的文件包,使用时就用bin结尾的);
2.配置环境变量,将下载好的maven压缩文件包解压,把里面的bin文件夹目录复制,粘贴到环境变量path的开头,注意最后要以分号结尾;
3.在windows控制台里输入 mvn –version,若要相关版本信息显示,则说明配置成功;
二、Maven远程库和本地库
1.当在项目开发过程中,需要引用一些jar包,maven会自动地帮我们获取;
2.首先maven会在本地库中查找jar包,若找不着,则去远程库中查找,再找不着,它会查看是否有其它特殊的库地址配置信息,再去查找,还是找不着,报错;
3.配置本地库:
默认本地库在C盘->用户名->.m2->repository下,当然我们可以修改本地库的地址;
在maven文件包conf文件夹下,setting.xml文件中(称为全局setting.xml),找到<localRepository>标签,在标签内写入我们需要自定义的本地库,并把该setting.xml文件复制一份放在和新本地库同一目录下(称为局域setting.xml),如无特别说明,本文全部setting.xml,都指的是局域setting.xml;
三、Maven基本项目结构
四、maven单个项目XML文件配置
0.该文件用以配置项目的基本信息、jar包的依赖;
1.该xml文件名为”pom.xml”,与项目的src目录放在同一目录;
2.pom.xml开头
1 <?xml version="1.0" encoding="UTF-8" ?> 2 3 <project xmlns=http://maven.apache.org/POM/4.0.0 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 6 7 其它全部配置…. 8 9 </project>
3.项目基本信息
一般还加上version标签,会在项目打包后显示在项目包后;
4.项目依赖(可以理解为引用的其它jar包)
1 <dependencies> 2 3 <dependency> 4 5 <groupId>…</groupId> 6 7 <artifactId>…</artifactId> 8 9 <version>…</version> 10 11 <scope>…</scope> 12 13 </dependency> 14 15 </dependencies>
五、基本命令使用
https://www.cnblogs.com/wkrbky/p/6352188.html
0.maven命令是以mvn开头的,要对项目使用命令时,先使用cd命令进入项目根目录,即存放src的目录;
1.mvn complie 编译源码;
2.mvn test 运行测试;
3.mvn package 打包
4.mvn install 在本地仓库中安装jar(即打包后把jar文件放到本地库中)
5.mvn clean 清除产生的项目
六、Eclipse中使用Maven
0.eclipse中自带了maven,有时候版本会太新或者太旧,我们可以更新它,而后直接使用;若未自带,装插件;
1.当然也可以指定自己配置好的maven:
(1)在首选项中,找到Maven->Installations ,点击add,在Installation Home填入我们的maven文件包路径;
(2)在User Setting里的User Setting填入setting.xml(本地仓库旁边那个)的文件路径;
2.可以使用Import导入一个maven项目;也可以新建一个maven项目,填写好项目基本信息后会自动生成一个maven的骨架;
3.运行相关Maven命令时,只要右键项目->运行方式->Maven ..(其中Maven Build...可以收到输入命令组合)
七、传递性依赖和依赖冲突
1.当’一个包’引用了’其它两个包’,而’其它两个包’又引用了’其它包’,则’其它包’也会引入’一个包里’;I(a->x b->y c->a,b 即c->a,b,x,y )
2.承上,当’其它两个包’引用的’其它包’同样但版本不同时,’当前包’会根据路径(即几重引用)来选择短的包,若路径相同时,则看哪个包先引用;也可以在’当前包’中直接引用’x3.0’,这样’当前包’引用的就是’x3.0’;
II(a->x1.0 b->x2.0 c->a,b 即c->a,b,x1.0 因为先引用a)
III(a->x1.0 b->x2.0 c->a,b f->c,b 即 f->c,b,x2.0 因为b路径短)
IV(a->x1.0 b->x2.0 c->a,b f->c,b,x3.0即 f->c,b,x3.0 因为x3.0路径短)
3.当然,也可以在’当前包’中排除其它包的引用
依赖其它包时,在该依赖标签内使用
1 <exclusions> 3 <exclusion> 5 GAV 7 …..
这样引入了其它包,但是却把指定的传递引用去掉了,比如在上面例子II中,我们可以在c依赖a时,写入排除x的标签,这样c会依赖X2.0;
八、聚合与继承
http://blog.csdn.net/wanghantong/article/details/36427411
九、使用Nexus2.x搭建私服
0.私服作用,起到中心私有的中心仓库作用;原本的中心仓库是在网络上的,下载包时需要联网,速度也一般般;而我们在我们自己的服务器上搭建私服后,该私有仓库就在局域网内,方便共享且速度快;
1.步骤:
(1)下载nexus压缩包nexus-2.14.4-03-bundle.zip,并解压到某一目录下;
(2)将该nexus文件包的bin路径添加到path环境变量中;
(3)在nexus文件包/bin/jsw/conf/ 下的wrapper.conf文件,修改javaJDK的映射路径,如下图:
(4)使用管理员身份打开命令行窗口,使用 nexus install 将nexus安装到windows服务中去,在使用 nexus start 开启私有仓库;
(5)在浏览器 输入 http://localhost:8081/nexus 打开私有仓库管理界面;
十、Nexus私服本地相应配置及使用
0.相关配置:https://my.oschina.net/heweipo/blog/481047
1.获取代理仓库的索引,有索引方便我们查找;在该代理仓库设置Download Remote Indexes为true,nexus就会去下载该仓库的索引,在nexus管理界面的Scheduled Tashs中可以看到下载任务;当然也可以直接把索引文件发到Nexussonatype-work exusindexer相应的文件夹中;
2.从eclipse发布到远程仓库(私服)
(1)首先要发布的远程仓库得允许我们发布进去,即在nexus中,仓库设置Deployment Policy为Allow Redeploy;
(2)在项目pom文件中配置发布管理器,使用<distributionManagement>标签,
若项目为snapshots版本,则标签内写<snapshotRepository>及相关配置
若项目为release版本,则标签内写<repository>及相关配置
相关配置指id(随意) name(随意) url(指定要发布到远程仓库)
(3)发布到远程仓库一般得有权限,即相关账号密码;权限配置在settting.xml中<servers>标签中写一个或多个<server>来配置:
<server>
<id>与pom发布管理器中的远程仓库标签ID相对应</id>
<username>用户名</username>
<password>密码</password>
</server>
(4)使用deploy命令发布;
3.私服中新建仓库,有时候我们有些项目开发需要与其它仓库独立开来,方便管理;于是我们可以新建一个仓库,增加相应的权限、角色、用户,来管理仓库;
(1)在Nexus管理界面中新建本地仓库,注意要允许上传、对应的相关版本;
(2)在Nexus管理界面侧边的Privileges中增加权限;
(3)在Nexus管理界面侧边的Relos中增加一个角色,给该角色添加相应权限;
(4) 在Nexus管理界面侧边的Users增加一个用户(该用户就是我们发布项目时所用的账号密码),并赋予该用户相应角色;
(5)像上文一样配置setting中的server,pom中的distributionManagement;
十一、Maven插件的使用
- 在maven使用命令时,是以 插件名:目标 的方式运行的;像compile其实是compiler:compile,只不过compiler有默认前缀为compile,只输入compile就达到了compiler:compile的效果;
- 使用一个插件时,需要先在项目的pom中配置(当然,基本install、clean、package…是默认有的),在<build><plugins><plugin>…里写上插件的GAV;
- 还可以在plugin标签里加上<excutions><excution><phase>命令 <goals><goal>目标
该配置意思为,在指定的命令运行后,就运行该插件的指定目标;
4.当然也可以在父pom中使用<build><pluginManagement><plugins><plugin>GAV中配置一个插件管理器,然后在子pom中继承它,如同依赖包的继承;
5.更多插件及插件使用方法请往官网查阅http://maven.apache.org/plugins/