Maven篇----01 简介&Maven私服
目录结构:
Maven篇----01 简介&Maven私服
Maven篇----02 Nexus私服管理
Maven篇----03 私服配置&使用
Maven篇----04 mvn常用命令
Maven篇----05 Nexus3私服管理
Maven篇----06 Nexus3中RestApi使用
Maven篇----07 如何将普通java项目转换为maven项目
Maven篇----08 pom.xml详解
Maven篇----09 一些有趣的特性使用
Maven篇----10 常见问题记录
1. Maven简介
1.1. 简述
Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
Maven是优秀的依赖管理工具,能轻松地解决繁杂的Java类库的依赖关系。
Maven是标准化的构建流程。Maven暴露了一组一致、简洁的操作接口,能帮助团队成员从原来的高度自定义的、复杂的构建系统中解脱出来,使用Maven现有的成熟的、稳定的组件也能简化构建系统的复杂度。
Maven是项目信息管理工具,能有效管理原本分散在项目中各个角落的项目信息,包括项目描述、开发者列表、版本控制系统地址等。另外还能通过Maven自动生成项目站点、项目文档、测试报告等非常具有价值的项目信息。
1.2. Maven实现的核心价值
1.简单:使用简洁、一致的操作接口,进行快速的项目构建,随时随地的地从源代码构建出最终的产品。
2.促进团队成员的交流与反馈:与版本控制系统结合后,所有人都能执行最新的构建并快速得到反馈。自动生成的项目报告也能帮助成员了解项目的状态,促进团队的交流。
3.测试驱动开发(TDD):测试是Maven生命周期中最重要的组成部分之一,并且Maven有现成的成熟插件支持业界流行的测试框架,如Junit和TestNG。
4.持续集成(CI):CI的前提是源码管理系统和构建系统,使用Maven后,持续集成会变得更加方便。
5.富有信息的工作区:使用Maven发布的项目报告站点,并配置你需要的项目报告,如测试覆盖率报告,都能帮你把信息推送到开发者眼前。
1.3. Maven坐标
在开发Maven项目的时候,需要为其定义适当的坐标,这是强制要求的。在这个基础上,其他Maven项目才能应用该项目生成的构件。
Maven坐标详解:
groupId:组织标识(包名)
artifactId:项目名称
version:项目的当前版本
packaging:项目的打包方式,最为常见的jar和war两种,默认jar
2. Maven仓库
Maven 仓库能帮助我们管理构件(主要是JAR)
它分两类:本地仓库和远程仓库。
本地仓库,缺省地址为${user.home}/.m2/repository(即一个用户对应拥有一个本地仓库)。在Maven主目录下修改setting.xml配置可以修改本地仓库地址。
而远程仓库又分为中央仓库、其他远程仓库和私服(私有服务器)。中央仓库是由Maven社区官方提供的,其中包含了大量常用的库。社区提供了一个 URL。用于搜索所有可以获取的代码库。
2.1.私服简介
私服是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的用户使用。当Maven需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部远程仓库下载,缓存在私服上之后,再为Maven的下载请求提供服务。
私服的好处:
a、节省自己的外网带宽
b、加速Maven构建
c、部署自己内部的第三方构件
d、提高稳定性,增强控制
e、降低中央仓库的负荷。
Nexus作为私服,提供强大的仓库管理、构件搜索等功能。 The world’s only repository manager with FREE support for popular formats.
Nexus Repository是以Java和JavaScript为主,实现的一个包含前端与后台的Web服务。 后台方面,它采用Jetty作为应用服务器、Karaf作为OSGi容器、OrientDB作为数据库。前端方面,它使用Swagger UI作为框架,是一个单页面Web App。
2.2.私服安装
a). 准备包
Nexus-2.11.4-01-bundle: 下载地址
JDK 1.8版本: 配置好环境变量,注意得是1.8版本
Apache Maven 3.5.4
b). 安装
# tar -zvxf nexus-2.11.4-01-bundle.tar.gz
# mv nexus-2.11.4-01-bundle /data/nexus/nexus
# cd /data/nexus/nexus/bin
# ./nexus start
注意:默认不能用root用户启动Nexus
c). 验证使用
访问地址:http://localhost:8081/nexus(默认账户:admin 密码:admin123)
私服默认镜像地址为:http://centos:8081/nexus/content/groups/public/
2.3.Nexus仓库说明
Nexus默认内置了很多仓库,可划分为4种不同类型:hosted(宿主仓库) 内部项目的发布仓库;proxy(代理仓库) 用于代理远程的公共仓库;group(仓库组);virtual(虚拟仓库)。
注意:如果在hosted和proxy有同名的包(这是需要避免的),在通过group下载时,默认查找优先级如下。最新版本 > hosted > proxy
Nexus会创建两个目录:一个目录包含运行环境及应用,为nexus;一个目录包含所有的配置和数据,为sonatype-work/nexus。升级nexus时只需要替换nexus目录,保留sonatype-work/nexus目录下所有配置和仓库。
2.4.Nexus仓库目录
Nexus工作目录在Nexus同级目录下,路径为${sonatype-work}/nexus/,目录详细说明如下:
nexus
├── backup 如果创建了定时备份配置文件的任务,该目录会定期产生包含了配置文件快照的ZIP压缩文件。每个压缩包都包含了conf/目录。
├── conf 该目录包含了所有配置。管理着仓库列表、日志配置,以及安全设置。
│ ├── capabilities.xml 进一步的Smart Proxy后端配置
│ ├── logback-nexus.xml 日志配置文件。用于定制日志信息的细节、频率,或者将日志输出到自己定制的输出源,配置在logback-nexus.xml文件中。
│ ├── logback.properties
│ ├── logback.xml
│ ├── lvo-plugin.xml 包含最新版本插件的配置。该xml文件存储了仓库管理用于查询检查更新版本的属性文件的位置。
│ ├── nexus.xml 该文件维护着仓库的列表以及所有服务器层面的配置,例如STMP配置、安全方面的、仓库组、targets、路径映射等等。
│ ├── security-configuration.xml 总体的安全配置
│ ├── security.xml 用户及权限的安全配置
├── db 如果开启了相关功能,将会存储用户token相关信息。
├── felix-cache 存储OSGiframework Apache Felix的缓存,该框架用于仓库管理的插件体系。
├── health-check 存放缓存了的健康检查报告,报告由仓库健康检查插件产生。
├── indexer 包括了所有管理下的仓库及仓库组的索引。索引是一个全文搜索引擎,用于搜索和索引Maven仓库。仓库管理为所有仓库维护着一个本地索引,也可以从远程仓库下载索引。
├── logs 目录下存放着nexus.log文件。该文件包含了一个仓库管理运行实例等信息。
├── nexus.lock
├── nuget Containsthe database supporting queries against NuGet repositories used for .NETpackage support.
├── plugin-repository 该目录包含了所有第三方安装的插件
├── storage
│ ├── apache-snapshots (proxy-代理仓库),查找Apache项目的快照版本的仓库,地址:https://repository.apache.org/snapshots/
│ ├── central (proxy-代理仓库),代理中央仓库,地址:http://repo1.maven.org/maven2/
│ ├── central-m1 (virtual-虚拟仓库),兼容Maven1 版本的jar或者插件
│ ├── codehaus-snapshots (proxy-代理仓库),查找codehaus项目的快照版本的仓库
│ ├── public (group-仓库组)
│ ├── releases (hosted-宿主仓库),存储公司内部发布版本releases构件。
│ ├── snapshots (hosted-宿主仓库),存储公司内部测试版本snapshots构件。
│ ├── thirdparty (hosted-宿主仓库),发布第3方jar包的仓库,如oracle数据库驱动等
└── timeline 存储着仓库管理用来存储事件及其他信息以支持内部操作的索引。用户界面通过系统展示这些内容。