Maven知识整理、搭建Maven私服

Maven核心功能是合理叙述项目间的依赖关系,大白话就是通过POM文件的配置来获取jar包,POM(project object model),即项目对象模型,POM通过groupId,artifactId,version来定位一个jar包,首先groupId一般为包名,artifactId为项目名,version为项目版本。除了这几个基本属性,还有很多高级的辅助属性,有机会详细学习。


一、Maven中仓库的概念

1.本地仓库

我们在maven的setting.xml里配置本地仓库的路径,默认为C:\.m2\repository

我们通过POM引入的jar包都会被下载到本地仓库

2.第三方仓库(私服)

公司内部搭建的私有maven仓库,存放公司内部的一些jar包,项目开发中,一般都会用到私服。

3.中央仓库

Maven的远程公用仓库,地址为: http://repo1.maven.org/maven2/,这个仓库是Maven自己维护的,里面有大量的我们需要的包。


二、Maven查找JAR包流程图


三、Maven java项目目录

src/main/java  存放java源码

src/main/resources  存放java配置文件

src/test/java  存放java测试源码

src/test/resources  存放java测试配置文件

pom  配置项目引用,置于根目录

target  存放项目编译后的文件,即输出目录


四、Maven web项目目录

src/main/java存放java源码

src/main/resources 存放java配置文件

src/main/webapp

      - - WEB-INF  存放页面文件

      - - web.xml  web项目的一些配置

src/test  存放java测试相应文件

pom  配置项目引用,置于根目录

target  存放项目编译后的文件,即输出目录


五、Maven生命周期

借鉴博客:http://www.cnblogs.com/luotaoyeah/p/3819001.html

maven定义了三套生命周期(clean,default,site),每个生命周期都包含一些阶段(phase),三套生命周期相互独立,单例每套生命周期里的phase有先后顺序,执行后面的phase时,前面的会自动依顺序执行。


六、Maven常用命令

mvn clean 删除target目录以及包含的文件

mvn compile 编译src/main/java目录,并生成.class文件,存到target目录下

mvn test  编译src/test/java目录

mvn package 生成压缩文件(项目jar/war包),存到target目录下

mvn install 将压缩文件上传到本地仓库

mvn deploy 将压缩文件上传到私服


七、Maven dependency属性配置

1.Optinal可选依赖(默认false)

标记依赖是否可选

举例:A→B→C

这时默认A会依赖C,如果在B项目中将C的optional设置为true,则A在引用B的时候不依赖C

2.Exclusion 依赖排除

排除依赖传递

举例:

A→C(版本为1.8)

B→C(版本为2.3)

如果我项目中同时引入A,B,这时C的版本就会冲突,如果我们想引入C(2.3)的话,就在A的dependency下设置exclusion C,这时引入A的时候就不会依赖C(1.8)了

3.scope

指定依赖范围,默认compile

compile 适用于所有阶段(编译,测试,运行),随项目打包发布

provided 在编译,测试阶段使用,war包的时候不会随项目打包发布

runtime 在测试,运行阶段使用,随项目打包发布

test 只在测试时使用,不会随项目打包发布

system 系统范围 其依赖与provided 类似,但是你必须显式的提供一个对于本地系统中JAR 文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,Maven 也不会在仓库中去寻找它。如果你将一个依赖范围设置成系统范围,你必须同时提供一个 systemPath 元素。注意该范围是不推荐使用的(你应该一直尽量去从公共或定制的 Maven 仓库中引用依赖)。

4.type


八、Maven依赖调节原则

第一原则:路径近者优先原则

举例:

A→B→C(C中引用了X包1.5版本)

E→C(C中引用了X包1.2版本)

此时引用的X包版本为1.2

第二原则:第一声明者优先原则

举例:

A→B(B中引用了X包1.7版本)

C→D(D中引用了X包1.1版本)

若A在C前面引入,则此时引用的X包版本为1.7

若C在A前面引入,则此时引用的X包版本为1.1

Maven会先根据第一原则进行选择,第一原则不符合会根据第二原则选择


九、搭建Maven私服

参考博客:https://blog.csdn.net/plei_yue/article/details/78299451

Jdk 1.8

Tomcat  8.5.23

Nexus(Nexus是一种远程仓库) 2.14.5-02

  1. 下载nexus的war包,放入tomcat的webapp下
  2. 手动启动tomcat(执行startup.bat),浏览器访问http://localhost:8080/nexus-14.5-02

   3.通过右上角LOG IN登录,默认用户名admin,密码admin123,进入Repositories 

 

Neuxs仓库类型

1.Group(仓库组):一组仓库的集合

2.Hosted(宿主):配置第三方仓库(包括公司内部私服)

3.Proxy(代理):私服会对中央仓库进行代理,用户连接私服,私服回到中央仓库下载jar或插件

4.virtual(虚拟):兼容Maven1版本的jar或插件

 

Nexus的仓库和仓库组介绍:

3rd party: 一个策略为Release的宿主类型仓库,用来部署无法从公共仓库获得的第三方发布版本构建

Apache Snapshots: 一个策略为Snapshot的代理仓库,用来代理Apache Maven仓库的快照版本构建

Central: 代理Maven中央仓库

Central M1 shadow: 代理Maven1 版本 中央仓库

Codehaus Snapshots: 一个策略为Snapshot的代理仓库,用来代理Codehaus Maven仓库的快照版本构件

Releases: 一个策略为Release的宿主类型仓库,用来部署组织内部的发布版本构件

Snapshots: 一个策略为Snapshot的宿主类型仓库,用来部署组织内部的快照版本构件

 Public Repositories:该仓库组将上述所有策略为Release的仓库聚合并通过一致的地址提供服务

 

4.测试上传到本地私服(好像是传到私服中会以.byte文件存储)

在IDEA中对项目执行deploy,执行后去私服里查看是否成功上传(我的已经测试成功)

5.测试从本地私服拉包

现在在本地就可以拉取我们配置的私服中刚刚我们手动deploy上去的包了(前提是遵循下面的配置)


settings.xml中

<localRepository/>本地仓库地址

<servers/>配置服务ID,私服的用户名密码

<mirrors/>配置镜像

详情:https://www.cnblogs.com/keyi/p/7475901.html

猜你喜欢

转载自blog.csdn.net/Peacock__/article/details/86167666