介绍

DevOps平台采用的介质服务器类型为NEXUS,NEXUS是一个强大的maven仓库管理器,它极大的简化了本地内部仓库的维护和外部仓库的访问。

一、配置Maven

[root@meteor ~]# wget http://www-us.apache.org/dist/maven/maven-3/3.5.3/binaries/apache-maven-3.5.3-bin.tar.gz
[root@meteor ~]# tar xfz apache-maven-3.5.-bin.tar.gz -C /usr/java/
[root@meteor ~]# cd /usr/java/
[root@meteor java]# ln -s apache-maven-3.5. maven
[root@meteor java]# vim /etc/profile (添加如下行)
JAVA_HOME=/usr/java/latest
MAVEN_HOME=/usr/java/maven
PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL JAVA_HOME MAVEN_HOME
[root@meteor java]# source /etc/profile (引用profile)
[root@meteor java]# java -version
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) -Bit Server VM (build 25.162-b12, mixed mode)
[root@wlf1 java]# mvn -v
Apache Maven 3.5. (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; --25T03::+:)
Maven home: /usr/java/maven
Java version: 1.8.0_162, vendor: Oracle Corporation
Java home: /usr/java/jdk1..0_162/jre
Default locale: en_US, platform encoding: UTF-
OS name: "linux", version: "3.10.0-693.17.1.el7.x86_64", arch: "amd64", family: "unix"
[root@meteor java]#
 

maven命令小结
mvn compile 命令会根据 pom.xml 中定义的dependencies 依赖,去maven 中心下载相关的包并进行编译,将编译后的文件放在 target/classes/目录中;
mvn test 命令会根据test目录中定义的测试文件对类进行编译测试,并把生成的测试报告存放在target/surefire-reports/目录中;
mvn clean 命令清除target 目录
mvn package 命令生成相关的jar包存放在 target目录中
mvn install 命令将生成的*.jar包复制到本地库中(~/.m2/repository/)

二、配置nexus
代码依赖是通过Maven进行管理的,而Maven的私库推荐使用的是Nexus。
Nexus是一个强大的Maven仓库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问。利用Nexus你可以只在一个地方就能够完全控制访问

和部署在你所维护仓库中的每个Artifact。Nexus是一套“开箱即用”的系统不需要数据库,它使用文件系统加Lucene来组织数据。Nexus
使用ExtJS来开发界面,利用Restlet来提供完整的REST
APIs,通过m2eclipse与Eclipse集成使用。Nexus支持WebDAV与LDAP安全身份认证。 Nexus分为专业收费的Nexus
Pro与免费的Nexus OSS两个版本。本文以Nexus OSS为主体。
1、安装过程

[root@meteor ~]# wget https://download.sonatype.com/nexus/3/latest-unix.tar.gz
[root@meteor ~]# tar xfz nexus-3.11.--unix.tar.gz -C /usr/local/
[root@meteor ~]# cd /usr/local/
[root@meteor local]# ln -s nexus-3.11.- nexus
[root@meteor local]# cd nexus
[root@meteor nexus]# vim /etc/profile
JAVA_HOME=/usr/java/latest
MAVEN_HOME=/usr/java/maven
PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
RUN_AS_USER=root export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL JAVA_HOME MAVEN_HOME RUN_AS_USER CLASSPATH
[root@meteor nexus]# source /etc/profile
[root@meteor nexus]# bin/nexus start
WARNING: ************************************************************
WARNING: Detected execution as "root" user. This is NOT recommended!
WARNING: ************************************************************
Starting nexus
[root@meteor nexus]# lsof -i: (需要等待一会,port启的较慢)
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java root 872u IPv4 0t0 TCP *:tproxy (LISTEN)
 

默认端口是tcp 8081; 默认管理员用户名和密码是admin/admin123。在浏览器中访问如下所示:

登录后可以在Server administration and configuration --> Repositories中查看到各种仓库,例public库如下所示:

2、基本操作
(1) Nexus的仓库分为以下几种:
proxy : 代理仓库,对远程仓库的本地代理。
hosted : 本地仓库。
virtual:影子仓库,对proxy或hosted仓库的映射。
group:仓库组,作为逻辑仓库组对外
逻辑关系 如下:

(2) 如果需要对repository的配置进行修改,如 central,Apache Snapshots,可参考如下操作:
点击左侧 repositories,右侧打开仓库列表。
选择仓库 central,可点rebuild index等操作,nexus 3.x保持默认即可。

(3) 新建hosted类型的仓库,如下所示:

然后选择“maven hosted”,如下所示:

输入Repositories 名称,版本策略选择“Release”,Layout pollcy选择"Strict" ,Deployment pollcy选择"Allow redeploy",如下所示:

(4) 新建proxy类型的仓库(工厂)
输入Repositories name ,并输入proxy 的目标地址,如下所示:

(5) 将自定义的proxy类型repository 添加到maven-public group中
打开maven-public repositories ,并选择相关的members ,如下所示:

最终各库状态如下:

3、调用 Repository
(1) 可以在java各项目的pom.xml文件中定义repository的url,从而调用 以上各repositories ,格式如下所示:

<repositories>
<repository>
<id> repo_id </id>
<name> repo_name </name>
<url> repo_url </url>
</repository>
...
...
<repositories>

(2) 如果有多个工厂(仓库),就需要定义多段<repository>,指定多个<url>。为了简化操作,可以在nexus中将多个Repository加入一个 Repo-Group,然后在pom.xml文件中指定一个Repo-Group的url即可获得多个Repository的依赖包。如下所示:

  <repositories>
<repository>
<id>nexus</id>
<name>nexus_repo</name>
<url>http://localhost:8081/repository/maven-public/</url>
<releases><enabled> true</enabled></releases>
<snapshots><enabled> true</enabled></snapshots>
</repository>
</repositories>

(3 ) 如果用户新创建一个项目,或更换一个新的workspace,就需要在新的pom.xml文件中重新指定respository,所以不推荐这种方式。推荐方法:在maven 的settings.xml文件中指定nexus仓库地址,如下所示:

  <profiles>
<profile>
<id>nexusProfile</id>
<repositories>
<repository>
<id>nexus</id>
<name>nexus_repo</name>
<url>http://localhost:8081/repository/maven-public/</url>
<releases><enabled> true</enabled></releases>
<snapshots><enabled> true</enabled></snapshots>
</repository>
</repositories>
</profile>
</profiles>

以上定义的profile必须在settings.xml文件激活才能生效,如下所示:

  <activeProfiles>
<activeProfile>nexusProfile</activeProfile>
</activeProfiles>

(4) 以上方法:如果把nexus stop ,它将跳过nexus,直接到maven的中央工厂(仓库)去下载。如果希望只有nexus才可以到中央工厂(仓库)下载,就需要在settings.xml文件中配置mirror,如下所示:

 <mirrors>
<mirror>
<id>nexusMirror</id>
<mirrorOf>*</mirrorOf>
<name>all repositoies for this Mirror.</name>
<url>http://localhost:8081/repository/maven-public/</url>
</mirror>
</mirrors>

为了可以在central repository 中下载snapshot 的依赖,需要添加 如下的profile:

 <profile>
<id>centralProfile</id>
<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://*</url>
<layout>default</layout>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
</profile>

并将之前的激活的profile修改为centralProfile,如下所示:

  <activeProfiles>
<activeProfile>centralProfile</activeProfile>
</activeProfiles>

(5) 为了让各项目在mvn deploy时可以将*.jar包push到hosted类型的本地repository中,首先需要在项目的pom.xml文件中定义push的target repository,如下所示:

  <distributionManagement>

    <repository>
<id>user-release</id>
<name>release</name>
<url>http://localhost:8081/repository/maven-releases/</url>
</repository> <snapshotRepository>
<id>user-snapshot</id>
<name>snapshot</name>
<url>http://localhost:8081/repository/maven-snapshots/</url>
</snapshotRepository> </distributionManagement>

图例如下:

然后在maven的setting.xml文件 中定义 user-release和user-snapshot所对应的用户名、密码,如下所示:

  <servers>
<server>
<id>user-release</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>user-snapshot</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>

注意:一定要保证snapshot的repository 的 "Allow redeploy"属性,如下所示:

较完整的maven配置文件settings.xml文件 内容如下
vim /usr/java/maven/conf/settings.xml

# servers 内添加用户/密码, 以便之后可以向releases/snapshots本地仓库(工厂)push jar 包
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server> # mirrors增加私库
<mirror>
<!--This sends everything else to /public -->
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.20.221:8081/repository/maven-public/</url>
</mirror>
<mirror>
<id>nexus2</id>
<mirrorOf>snapshots</mirrorOf>
<url>http://192.168.20.221:8081/repository/maven-public/</url>
</mirror>
# 一定要配置为 <mirrorOf>*</mirrorOf>,即让所有的仓库都先经过私库,这样可以将远程下载的包缓存到本地 <profile>
<id>nexus</id>
<!--Enable snapshots for the built in central repo to direct -->
<!--all requests to nexus via the mirror --> <repositories>
<repository>
<id>central</id>
<url>http://192.168.20.221:8081/repository/maven-central/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories> <pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://192.168.20.221:8081/repository/maven-central/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories> </profile> <activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
#以上定义 profile,最后activeProfile 激活定义的profile
#在profile中允许 访问releases/snapshots仓库 (工厂)

提示:
Maven安装目录下的 /conf/settings.xml 起全局控制作用。
用户目下的Maven配置文件,即:~/.m2/settings.xml 仅对当前用户用效

关于Maven的mirror:
mirrors可以配置多个mirror,每个mirror有id,name,url,mirrorOf属性,id是唯一标识一个mirror就不多说了,name貌似没多大用,相当于描述,url是官方的库地址,mirrorOf代表了一个镜像的替代位置,例如central就表示代替官方的中央库。
镜像库并不是一个分库的概念,就是说当a.jar在第一个mirror中不存在的时候,maven会去第二个mirror中查询下载。但事实却不是这样,当第一个mirror中不存在a.jar的时候,并不会去第二个mirror中查找,甚至于,maven根本不会去其他的mirror地址查询。
maven的mirror是镜像,而不是“分库”,只有当前一个mirror无法连接的时候,才会去找后一个,类似于备份和容灾。
mirror也不是按settings.xml中写的那样的顺序来查询的。所谓的第一个并不一定是最上面的那个。当有id为B,A,C的顺序的mirror在mirrors节点中,maven会根据字母排序来指定第一个,所以不管怎么排列,一定会找到A这个mirror来进行查找,当A无法连接,出现意外的情况下,才会去B查询。

在Maven工程的pom.xml中:
当发布到属性为snapshot的仓库时,工程自述说明小节中的 <version>,需要带上后缀 SNAPSHOT,否则会当成 release 发布, 会收到 400 Bad Request 错误。
发布配置中的 <url> 地址一定要区分清楚。并在 release 与 snapshot 仓库里配置不同的地址。此外,id、name 要与Nexus中仓库的配置 configuration 中的内容一致。
Nexus OSS的仓库属性:
snapshot : 快照版本,即不稳定的频繁发布场所,常用于团队成员快速联调。
release : 正式版本,即稳定包所在场所

maven-public仓库地址 访问如下:

转自

Nexus入门-WorkNote-51CTO博客 https://blog.51cto.com/caiyuanji/2117120

Nexus入门【转】的更多相关文章

  1. Nexus入门指南(图文)

    Nexus入门指南(图文) 博客分类: Maven JavamavenGoogleApacheTomcat Nexus介绍 Nexus 是Maven仓库管理器,如果你使用Maven,你可以从Maven ...

  2. nexus私有仓库搭建

    步骤: 下载安装JDK(注意可用版本) .查看CentOS自带JDK是否已安装,输入: yum list installed |grep java 一般来说,如果是新装CentOS系统的话,不会有JD ...

  3. nexus私服linux搭建问题

    一.最近搭建nexus私服,从官网下载下来总是报503服务器无效,很是无奈,最后在网上找到一个可以用的 收藏起来,这里给大家共享一下 下载地址:http://pan.baidu.com/s/1kT3U ...

  4. Maven:版本管理 【SNAPSHOT】【Release】【maven-release-plugin】【nexus】

    什么是版本管理 首先,这里说的版本管理(version management)不是指版本控制(version control),但是本文假设你拥有基本的版本控制的知识,了解subversion的基本用 ...

  5. 【运维技术】Maven + Gogs + Nexus 实现版本管理 + 代码模块开发管理

    Gogs:能够实现fork + 代码提交 + 代码框架 Nexus:进行jar包的版本管理,私服下载jar包共享jar包 Maven:在客户端进行模块管理和批量操作 1. 本地maven仓库配置配置s ...

  6. Maven最佳实践:版本管理

    什么是版本管理 首先,这里说的版本管理(version management)不是指版本控制(version control),但是本文假设你拥有基本的版本控制的知识,了解subversion的基本用 ...

  7. Maven仓库概述

    什么是Maven仓库 在Maven世界中,任何一个依赖.插件或项目构建的输出,都可以称为构建.由于Maven引入了坐标机制,任何一个构建都可以由其坐标唯一标识.坐标是一个构建在Maven世界中的逻辑表 ...

  8. Maven 专题

    目录: Maven的安装 Eclipse安装Maven插件 Nexus私服搭建 Maven+Nexus配置 发布自己的构件(至Nexus) 创建maven多模块工程group 整理中[...] 先放一 ...

  9. Maven最佳实践:版本管理【转】

    什么是版本管理 首先,这里说的版本管理(version management)不是指版本控制(version control),但是本文假设你拥有基本的版本控制的知识,了解subversion的基本用 ...

随机推荐

  1. Anaconda-Jupyter notebook 如何安装 nbextensions

    系统环境:windows 安装过程中,再次遇到了一地鸡毛,经过不断查询方法,发现前辈大牛们好棒棒! Step1:确定是已经安装好anaconda Step2:要在anaconda prompt模式下运 ...

  2. gitlab(7.9)升级到8.0.1

    1.gitlab8.0更新说明 GitLab 8.0 现在完全集成了持续集成工具 (GitLab CI) ,此外还完全重写了 UI,节省了至少 50% 的磁盘空间.更快的合并,内置持续集成(CI)到 ...

  3. GAE相关

    Google App Engine for Java是可以在Google托管服务器基础架构上托管和运行用户Web应用程序.出于安全原因,这些应用程序在沙盒环境中执行. 沙箱本身由两层组成.第一层是GA ...

  4. Python标准库-datatime和time

    Python标准库-datatime和time 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.标准库datatime 1>.datatime模块 #!/usr/bin/e ...

  5. 2013.5.2 - KDD第十四天

    今天早上来了之后就处理语料,然后发现处理好后的gbk编码的语料在HPC上没法训,而utf8在上面训练可以.后来就让它在上面训着,学长还没来. 学长回来之后问他怎么回事,他说不应该,然后我们看了一下第一 ...

  6. Python语言程序设计(3)--实例2-python蟒蛇绘制-turtle库

    1. 2. 3.了解turtle库 Turtle,也叫海龟渲染器,使用Turtle库画图也叫海龟作图.Turtle库是Python语言中一个很流行的绘制图像的函数库.海龟渲染器,和各种三维软件都有着良 ...

  7. 「NOI2012」骑行川藏

    「NOI2012」骑行川藏 题目描述 蛋蛋非常热衷于挑战自我,今年暑假他准备沿川藏线骑着自行车从成都前往拉萨. 川藏线的沿途有着非常美丽的风景,但在这一路上也有着很多的艰难险阻,路况变化多端,而蛋蛋的 ...

  8. CSS 相邻元素选择器

    相邻兄弟选择器(Adjacent sibling selector)可选择紧接在另一元素后的元素,且二者有相同父元素.选择相邻兄弟 如果需要选择紧接在另一个元素后的元素,而且二者有相同的父元素,可以使 ...

  9. vscode——配置go插件

    前言 这个真的折腾死我了,看了N多博客才弄好 这两个还是比较有用的~ https://www.cnblogs.com/nickchou/p/9038114.html https://www.jians ...

  10. 010——MATLAB运行错误跳到下一个循环

    (一)MATLAB运行错误跳到下一个循环 :%文件的个数 try %运行的程序放到这里 catch continue%假如上面的没法执行则执行continue,到下个循环 end