1 什么是Maven?

1.1 Maven的概念

  Maven主要服务于基于Java平台的项目构建、依赖管理和项目信息开发,它是一个异常强大的构建工具,能够帮助我们自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署。

1.2 Maven的优点

1.2.1 便捷

  使用Maven最大的一点优点就是便捷。构建项目时,开发者无需一遍又一遍地输入命令,一次又一次地点击鼠标,我们需要做的就是输入Maven的简单命令,Maven会帮我们处理那些繁琐的任务。

1.2.2 标准化构建方式

  在使用Maven之前,多个项目可能有多种构建方式;使用Maven之后,多个项目的构建方式被统一起来,这样极大地避免了不必要的学习成本,而且有利于项目团队的标准化。

1.2.3 提供中央仓库

  Maven不仅仅是构建工具,它还是一个依赖管理工具和项目信息管理工具。它提供有公共的中央仓库,只要我们提供项目所需构件的“坐标”,Maven能帮助我们自动下载,省去手工寻找的时间成本。

2 什么是Maven仓库

2.1 Maven仓库的概念

  在Maven的世界中,任何一个依赖、插件或者项目构建的输出,都可以被称为构件,每一个构件都有其唯一的坐标标识(主要包含groupId、artifactId、version)。根据坐标标识,任何Maven项目使用任何一个构件的方式是完全相同的。在此基础上,Maven可以在某个位置统一存储所有Maven项目共享的构件,这个统一的位置就是Maven仓库。

实际的Maven项目将不再各自存储其依赖文件,它们只需要声明这些依赖的坐标,在需要的时候(编译项目时),Maven会自动根据坐标找到仓库中的构件并使用它们。

2.2 Maven仓库的分类

2.2.1 本地仓库

  本地仓库即存储在本机磁盘中的某个文件夹,Maven下载的构件都存储在该文件夹下。在安装Maven软件后,默认情况下在用户目录下都有一个路径为“.m2/repository/”的仓库目录,目录路径类似如下形式:“C:\Users\xxx\.m2\repository\”,另外开发者可编辑Maven安装目录下“conf”文件夹中的“settings.xml”文件,在其中设置本地仓库的路径。具体的设置并不是本文重点,在此不加以描述,读者可请自行百度。

2.2.2 远程仓库

顾名思义,远程仓库即是存储在远端服务器中的某个文件夹,该文件夹存储构件以供开发者进行下载,Maven就自带其中央仓库,我们可点击如下地址进行该仓库构件的查询https://mvnrepository.com/

2.3 Maven构件下载顺序

当Maven根据坐标寻找构件时,会优先查看本地仓库,如果本地仓库存在此构件,则直接使用;如果本地仓库不存在此构件,或者需要查看是否有更新的构件版本,Maven就会去远程仓库去查找,发现所需构件后,将其下载到本地再使用。

3 Maven私服

3.1 Maven私服的概念

  私服是一种特殊的远程仓库,为了节省带宽和时间,大多数公司会选择在局域网中架设一个私有的仓库服务器,用其代理所有外部的远程仓库。内部的项目还可以部署到私服上以供其他项目使用。当Maven下载构件时,它从私服请求,若私服不存在此构件,Maven则从远程仓库查找并存储到私服中,在从私服中请求下载构件。此外,一些无法从外部仓库下载到的构件也能从本地上传到私服仓库中供大家使用。以下给出示例图。

  

3.2 建立私服的好处

3.2.1 节省带宽

  建立私服可以减少组织自己的开支,大量的对于外部仓库的重复请求会消耗很大的带宽,利用私服代理外部仓库之后,对外的重复构件下载便得以消除,即降低外网带宽的压力。

3.2.2 加速Maven构建

不停地连接请求外部仓库是十分耗时的,但是Maven的一些内部机制(如快照等更新检查)要求Maven在执行构建时不停地检查远程仓库。因此当项目配置了很多远程仓库时,构建的速度会大大降低。使用私服可以很好地解决该问题,Maven只需检查局域网中私服的数据,项目构建速度得到提高。

3.3.3 部署第三方构件

当某个构件无法从任何一个外部远程仓库获得,怎么办?建立私服之后,用户可以将这些构件部署到该仓库中,供内部的Maven项目使用。

3.3.4 提高稳定性,增强控制

Maven构建高度依赖远程仓库,因此,当外网连接不稳定时(如公司网络出现问题、远程仓库需要维护无法连接等),Maven构建会变得极其不稳定,甚至无法成功构建项目。建立私服后,即使暂时没有外网连接,由于私服中已经缓存了大量的构件,Maven仍然可以正常构建项目。另外一些私服软件提供了很多额外的功能,如权限管理、版本区分等,管理员可以对仓库进行一些更高级的控制。

4 构建Maven私服

4.1 选择搭建工具

  搭建Maven私服的工具有三种:Apache基金会的Archiva、JFrog的Artifactory和Sonatype的Nexus。其中Archiva是完全开源的,因此我建议选择该软件进行私服的搭建。

4.2 JDK的下载和安装

  Archiva的应用启动需要用户提前安装jdk,关于jdk的下载和安装本文不再描述,请读者自行百度。

4.3 Archiva的下载和安装

点击如下地址进入其官网地址:http://archiva.apache.org/index.cgi,在该页面中找到“Download Archiva”按钮,选择zip文件进行下载,如下图:

  下载完成后解压该文件,将其中的“apache-archiva-xxx”文件夹放到某个磁盘目录下,其中该文件夹根目录下conf文件夹中的“jetty.xml”可以设置应用启动的端口,具体设置详情请百度。

4.4 启动服务

(1) 使用“管理员身份运行cmd”  (开始菜单的附件中),进入软件安装目录中bin目录;

  C:\Windows\system32>cd D:\Program Files\apache-archiva-2.2.1\bin

  C:\Windows\system32>D:

(2)输入命令“archiva.bat install”,命令运行正常则会输出“wrapper | Apache Archiva installed.”;

  E:\Program Files\apache-archiva-2.2.1\bin>archiva.bat install

  wrapper | Apache Archiva installed.

(3)输入命令“archiva.bat start”,命令运行正常则会输出“wrapper | Starting the Apache Archiva service...、wrapper | Apache Archiva started.”;

  E:\Program Files\apache-archiva-2.2.1\bin>archiva.bat start

  wrapper | Starting the Apache Archiva service...

wrapper | Apache Archiva started.

4.5 访问服务网页

  打开浏览器,在地址栏中输入http://host:port(具体的host和port用户自行指定),进入到软件管理GUI页面,第一次访问时,用户可创建一个管理员账户。

  用户登录成功后,页面左侧菜单栏罗列出软件全部功能菜单,用户可根据需要进行相关的配置。关于Archiva的各项配置说明,请读者自行百度。

4.6 下载和上传构件

4.6.1 下载构件

4.6.1.1 配置本地Maven的settings.xml

(1)配置同服务器的认证信息

在<servers>标签下新建一个<server>标签,在该标签下新建子标签<id>、<username>、<password>,其中id 是要认证的服务器名称,可以配置多个。它是用来标记服务器的,要唯一;username和password是登录私服服务器所需用户名和密码。如果要连接多个私服,可以类似地配置多个 server,每个 server 是一个私服的认证信息。

(2)配置要连接的私服信息

在<mirrors>标签下新建一个<mirror>标签,在该标签下新建子标签<id>、<mirrorOf>、<name>、<url>,其中id 是私服映射的标记,该标记要同 server 中的 id 一样,如果连接私服需要认证信息,Maven 可以通过 id 找对应的 server,用 server 的认证信息进行认证;mirrorOf的值设置为“*”,表示匹配所有远程仓库,name为该私服仓库的名称,可随意取,方便自己记忆和理解就好;url为该私服仓库的url地址,值为http://host:port/repository/仓库id(该值为默认值,用户可以修改);

4.6.1.2 创建Maven项目

  使用上述配置的settings.xml的Maven工具创建Maven项目,接下来的添加依赖和之前的添加方式并无区别,至此私服搭建完毕并可以使用。

4.6.2 上传构件

4.6.2.1 配置Maven项目的pom文件

在project标签内,添加<distributionManagement>标签,指定要发布的目标地(私服)。具体内容如下:

<distributionManagement>

<repository>

<id>archivaServer(仓库id)</id>

<url>http://localhost:8080/repository/internal(仓库地址)</url>

</repository>

<snapshotRepository>

<id>archivaServer(仓库id)</id>

<url>http://localhost:8080/repository/snapshots(仓库地址)</url>

</snapshotRepository>

</distributionManagement>

  上面的信息配置了两个仓库 url,一个是 repository;另一个是快照 repository。每个 repository 中都有一个 url。

4.6.2.2 运行发布命令

运行Maven的deploy命令,Maven会自动编译和打包项目,并将其发布到私服仓库中。发布完毕后,开发者即可随心所欲使用该构件。

Maven仓库介绍以及私服搭建的更多相关文章

  1. maven仓库介绍

    maven仓库介绍 http://juvenshun.iteye.com/blog/359256

  2. Maven Nexus3 安装,私服搭建

    为啥搭建Maven私服? 如果没有私服,我们所需的所有构件都需要通过maven的中央仓库和第三方的Maven仓库下载到本地,而一个团队中的所有人都重复的从maven仓库下载构件无疑加大了仓库的负载和浪 ...

  3. ava Maven项目之Nexus私服搭建和版本管理应用

    目录: Nexus介绍 环境.软件准备 Nexus服务搭建 Java Maven项目版本管理应用 FAQ 1.Nexus介绍 Nexus是一个强大的Maven仓库管理器,它极大地简化了自己内部仓库的维 ...

  4. Java Maven项目之Nexus私服搭建和版本管理应用

    转载自:https://cloud.tencent.com/developer/article/1010603 1.Nexus介绍 Nexus是一个强大的Maven仓库管理器,它极大地简化了自己内部仓 ...

  5. maven仓库介绍《本地仓库、远程仓库》

    在Maven中,任何一个依赖.插件或者项目构建的输出,都可以称之为构件.Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库.(仓库就是存放依赖和插件的地方)任何的构件 ...

  6. 如何将本地jar包放入本地maven仓库和远程私服仓库

    1.将本地jar包放入本地仓库.只需执行如下命令即可: mvn install:install-file -Dfile=D:/demo/fiber.jar -DgroupId=com.sure -Da ...

  7. 使用nexus搭建maven仓库(本地私服)

    我们在使用maven的时候,对于项目所依赖的jar包,maven默认会在中央仓库下载jar包,到本地的磁盘目录(如果没有配置则是用户目录下/.m2/repository文件夹下).如果公司内部搭了一个 ...

  8. (三)Maven仓库介绍与本地仓库配置

    1.Maven本地仓库/远程仓库的基本介绍 示意图: 本地仓库是指存在于我们本机的仓库,在我们加入依赖时候,首先会跑到我们的本地仓库去找,如果找不到则会跑到远程仓库中去找.对于依赖的包大家可以从这个地 ...

  9. Maven入门----介绍及环境搭建(一)

    知识点: 介绍Maven 本机搭建Maven环境 DEMO测试 本地仓库迁出 Maven简介: 百度百科: 说到底就是一个项目管理工具. 本机搭建Maven环境: Maven的环境需要jdk环境的支持 ...

随机推荐

  1. idea快捷方式2

    IntelliJ Idea 常用快捷键列表 Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时按 “!”键Ctrl+E,最近的文件Ctrl+Shift+E,最近更改的文件Sh ...

  2. 自己实现dup2

    转自 http://blog.csdn.net/todd911/article/details/11747097 #include <stdio.h> #include <unist ...

  3. css偷懒神奇

    偷懒神奇链接:https://qishaoxuan.github.io/css_tricks/glass/

  4. python 安装 pyHook

    下载网站:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyhook 查看python版本 C:\Users\k\Desktop\file_trans> ...

  5. c++ 排序,<< 运算符重载

    #include <iostream> #include <functional> #include <list> using namespace std; ost ...

  6. CF1206A

    CF1206A 题意: 给你 $ a , b $ 两个数组,要求从两个数组中各选一个数,使得它们的和不存在于任何一个数组. 解法: 一道极端签到的题. 因为是要构建一个不存于两个数组的数,所以直接将两 ...

  7. python网络爬虫(一):网络爬虫的定义

    网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛.网络蜘蛛是通过网页的链接地址来寻找网页的. 从网站某一个页面(通常是首页)开 ...

  8. Redis字符串(String)

    1.set SET key value [EX seconds] [PX milliseconds] [NX|XX] 将字符串值 value 关联到 key 可选参数: EX second :设置键的 ...

  9. Elasticsearch的Search详解

    介绍 ES不是新技术,是将全文检索和数据分析.分布式整合到一起. 基于lucene开发,提供简单的restful api接口.java api接口.其他语言开发接口等. 实现了分布式的搜索引擎和分析引 ...

  10. Git 中无法忽略 .xcuserstate 的解决方法

    1.查看代码变化git status 2.接着输入 git rm –cached 刚才复制的地址 ,如下.git rm --cached RxSwift/Rx.xcodeproj/xcuserdata ...