Maven私服Nexus3.x环境构建操做记录

 

1、Maven介绍
Apache Maven是一个创新的软件项目管理和综合工具。
Maven提供了一个基于项目对象模型(POM)文件的新概念来管理项目的构建,能够从一个中心资料片管理项目构建,报告和文件。
Maven最强大的功能就是可以自动下载项目依赖库。
Maven提供了开发人员构建一个完整的生命周期框架。开发团队能够自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期。
在多个开发团队环境时,Maven能够设置按标准在很是短的时间里完成配置工做。因为大部分项目的设置都很简单,而且可重复使用,Maven让开发人员的工做更轻松,同时建立报表,检查,构建和测试自动化设置。
Maven项目的结构和内容在一个XML文件中声明,pom.xml 项目对象模型(POM),这是整个Maven系统的基本单元。html

Maven提供了开发人员的方式来管理:
1)Builds
2)Documentation
3)Reporting
4)Dependencies
5)SCMs
6)Releases
7)Distribution
8)mailing list
归纳地说,Maven简化和标准化项目建设过程。处理编译,分配,文档,团队协做和其余任务的无缝链接。
Maven增长可重用性并负责创建相关的任务。
Maven最初设计,是以简化Jakarta Turbine项目的建设。在几个项目,每一个项目包含了不一样的Ant构建文件。 JAR检查到CVS。
Apache组织开发Maven能够创建多个项目,发布项目信息,项目部署,在几个项目中JAR文件提供团队合做和帮助。java

Maven主要目标是提供给开发人员:
1)项目是可重复使用,易维护,更容易理解的一个综合模型。
2)插件或交互的工具,这种声明性的模式。node

2、私服介绍
私服是指私有服务器,是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构建。有了私服以后,当 Maven 须要下载构件时,直接请求私服,私服上存在则下载到本地仓库;不然,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。linux

3、Nexus介绍
Nexus是一个强大的Maven仓库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问。
若是使用了公共的Maven仓库服务器,能够从Maven中央仓库下载所须要的构件(Artifact),但这一般不是一个好的作法。
正常作法是在本地架设一个Maven仓库服务器,即利用Nexus私服能够只在一个地方就可以彻底控制访问和部署在你所维护仓库中的每一个Artifact。
Nexus在代理远程仓库的同时维护本地仓库,以下降中央仓库的负荷,节省外网带宽和时间,Nexus私服就能够知足这样的须要。
Nexus是一套“开箱即用”的系统不须要数据库,它使用文件系统加Lucene来组织数据。
Nexus使用ExtJS来开发界面,利用Restlet来提供完整的REST APIs,经过m2eclipse与Eclipse集成使用。
Nexus支持WebDAV与LDAP安全身份认证。
Nexus还提供了强大的仓库管理功能,构件搜索功能,它基于REST,友好的UI是一个extjs的REST客户端,它占用较少的内存,基于简单文件系统而非数据库。web

为何要构建Nexus私服?
若是没有Nexus私服,咱们所需的全部构件都须要经过maven的中央仓库和第三方的Maven仓库下载到本地,而一个团队中的全部人都重复的从maven仓库下载构件无疑加大了仓库的负载和浪费了外网带宽,若是网速慢的话,还会影响项目的进程。不少状况下项目的开发都是在内网进行的,链接不到maven仓库怎么办呢?开发的公共构件怎么让其它项目使用?这个时候咱们不得不为本身的团队搭建属于本身的maven私服,这样既节省了网络带宽也会加速项目搭建的进程,固然前提条件就是你的私服中拥有项目所需的全部构件。数据库

总之,在本地构建nexus私服的好处有:
1)加速构建;
2)节省带宽;
3)节省中央maven仓库的带宽;
4)稳定(应付一旦中央服务器出问题的状况);
5)控制和审计;
6)可以部署第三方构件;
7)能够创建本地内部仓库;
8)能够创建公共仓库
这些优势使得Nexus日趋成为最流行的Maven仓库管理器。apache

4、Maven的安装
下载地址:http://maven.apache.org/download.cgi
提早在服务器上安装jdk环境(参考:Centos中yum方式安装java
[root@master-node ~]# cd /usr/local/src/
[root@master-node src]# wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
[root@master-node src]# tar -zvxf apache-maven-3.3.9-bin.tar.gz
[root@master-node src]# mv apache-maven-3.3.9 /usr/local/mavenvim

接着配置系统环境变量,在/etc/profile文件底部添加以下内容:
[root@master-node src]# java -version
openjdk version "1.8.0_111"
OpenJDK Runtime Environment (build 1.8.0_111-b15)
OpenJDK 64-Bit Server VM (build 25.111-b15, mixed mode)
[root@master-node src]# vim /etc/profile
.....
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk                                //java的环境变量设置
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin缓存

export MAVEN_HOME=/usr/local/maven                                                 //maven的环境变量设置
export PATH=$PATH:$MAVEN_HOME/bin
[root@master-node src]# source /etc/profiletomcat

最后验证是否安装成功,出现以下信息,说明安装成功
[root@master-node src]# mvn --version                   # 最好按照java jdk
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /usr/local/maven
Java version: 1.8.0_111, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.111-2.b15.el7_3.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-327.el7.x86_64", arch: "amd64", family: "unix"

5、Nexus安装
Nexus的安装有两种实现方式:
1)war包安装方式
下载地址:https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.14.2-01.war
直接将war包放在tomcat的根目录下,启动tomcat就能够用了

2)源码安装方式(以前在用的是2.14.4版本,这里是新版本)
下载地址:https://www.sonatype.com/download-oss-sonatype           (云盘下载:http://pan.baidu.com/s/1miKFm5a
[root@master-node ~]# cd /usr/local/src/
[root@master-node src]# wget https://sonatype-download.global.ssl.fastly.net/nexus/3/nexus-3.2.0-01-unix.tar.gz
[root@master-node src]# tar -zvxf nexus-3.2.0-01-unix.tar.gz
[root@master-node src]# mv nexus-3.2.0-01 /usr/local/nexus

启动nexus(默认端口是8081)
[root@master-node src]# /usr/local/nexus/bin/nexus
WARNING: ************************************************************
WARNING: Detected execution as "root" user. This is NOT recommended!
WARNING: ************************************************************
Usage: /usr/local/nexus/bin/nexus {start|stop|run|run-redirect|status|restart|force-reload}
[root@master-node src]# /usr/local/nexus/bin/nexus start
WARNING: ************************************************************
WARNING: Detected execution as "root" user. This is NOT recommended!
WARNING: ************************************************************
Starting nexus
上面在启动过程当中出现告警:不推荐使用root用户启动。这个告警不影响nexus的正常访问和使用。
去掉上面WARNING的办法:
[root@master-node src]# vim /etc/profile
......
export RUN_AS_USER=root
[root@master-node src]# source /etc/profile
[root@master-node src]# lsof -i:8081            //nexus服务启动成功后,须要稍等一段时间,8081端口才起来
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 1486 root 859u IPv4 23504303 0t0 TCP *:tproxy (LISTEN)

在部署机上的iptables里打开8081端口
[root@master-node src]# vim /etc/sysconfig/iptables
....
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8081 -j ACCEPT
[root@master-node src]# /etc/init.d/iptables restart

访问nexus,即http://localhost:8081    (若是出现404,就访问http://localhost:8081/nexus)

出现上述页面,说明配置nexus成功!
点击右上角“Log in”,
输入默认用户名(admin)和默认密码(admin123)登陆

能够点击上面的“设置”图标,在“设置”里能够添加用户、角色,对接LDAP等的设置,以下:

能够在“管理”里查看nexus的系统信息

6、Nexus说明
1.component name的一些说明:
    1)maven-central:maven中央库,默认从https://repo1.maven.org/maven2/拉取jar
    2)maven-releases:私库发行版jar
    3)maven-snapshots:私库快照(调试版本)jar
    4)maven-public:仓库分组,把上面三个仓库组合在一块儿对外提供服务,在本地maven基础配置settings.xml中使用。
2.Nexus默认的仓库类型有如下四种:
    1)group(仓库组类型):又叫组仓库,用于方便开发人员本身设定的仓库;
    2)hosted(宿主类型):内部项目的发布仓库(内部开发人员,发布上去存放的仓库);
    3)proxy(代理类型):从远程中央仓库中寻找数据的仓库(能够点击对应的仓库的Configuration页签下Remote Storage Location属性的值即被代理的远程仓库的路径);
    4)virtual(虚拟类型):虚拟仓库(这个基本用不到,重点关注上面三个仓库的使用);
3.Policy(策略):表示该仓库为发布(Release)版本仓库仍是快照(Snapshot)版本仓库;
4.Public Repositories下的仓库
   1)3rd party: 没法从公共仓库得到的第三方发布版本的构件仓库,即第三方依赖的仓库,这个数据一般是由内部人员自行下载以后发布上去;
   2)Apache Snapshots: 用了代理ApacheMaven仓库快照版本的构件仓库
   3)Central: 用来代理maven中央仓库中发布版本构件的仓库
   4)Central M1 shadow: 用于提供中央仓库中M1格式的发布版本的构件镜像仓库
   5)Codehaus Snapshots: 用来代理CodehausMaven 仓库的快照版本构件的仓库
   6)Releases: 内部的模块中release模块的发布仓库,用来部署管理内部的发布版本构件的宿主类型仓库;release是发布版本;
   7)Snapshots:发布内部的SNAPSHOT模块的仓库,用来部署管理内部的快照版本构件的宿主类型仓库;snapshots是快照版本,也就是不稳定版本
因此自定义构建的仓库组代理仓库的顺序为:Releases,Snapshots,3rd party,Central。也可使用oschina放到Central前面,下载包会更快。
5.Nexus默认的端口是8081,能够在etc/nexus-default.properties配置中修改。
6.Nexus默认的用户名密码是admin/admin123
7.当遇到奇怪问题时,重启nexus,重启后web界面要1分钟左右后才能访问。
8.Nexus的工做目录是sonatype-work(路径通常在nexus同级目录下)
[root@master-node local]# pwd
/usr/local
[root@master-node local]# ls nexus/
bin deploy etc lib LICENSE.txt NOTICE.txt public system
[root@master-node local]# ls sonatype-work/
nexus3
[root@master-node local]# ls sonatype-work/nexus3/
backup blobs cache db elasticsearch etc generated-bundles health-check instances keystores lock log orient port tmp

Nexus仓库分类的概念
1)Maven可直接从宿主仓库下载构件,也能够从代理仓库下载构件,而代理仓库间接的从远程仓库下载并缓存构件
2)为了方便,Maven能够从仓库组下载构件,而仓库组并无时间的内容(下图中用虚线表示,它会转向包含的宿主仓库或者代理仓库得到实际构件的内容).

 

Nexus的web界面功能介绍

1.Browse Server Content

1.1  Search
这个就是相似Maven仓库上的搜索功能,就是从私服上查找是否有哪些包。
注意:
1)在Search这级是支持模糊搜索的,如图所示:

2)若是进入具体的目录,好像不支持模糊搜索,如图所示:

1.2  Browse

1)Assets
这是能看到全部的资源,包含Jar,已经对Jar的一些描述信息。
2)Components
这里只能看到Jar包。

2.Server Adminstration And configuration

看到这个选项的前提是要进行登陆的,如上面已经介绍登录方法,右上角点击“Sign In”的登陆按钮,输入admin/admin123,登陆成功以后,便可看到此功能,如图所示:

2.1 Blob Stores
文件存储的地方,建立一个目录的话,对应文件系统的一个目录,如图所示:

2.2 Repositories

1)Proxy
这里就是代理的意思,代理中央Maven仓库,当PC访问中央库的时候,先经过Proxy下载到Nexus仓库,而后再从Nexus仓库下载到PC本地。
这样的优点只要其中一我的从中央库下来了,之后你们都是从Nexus私服上进行下来,私服通常部署在内网,这样大大节约的宽带。
建立Proxy的具体步骤
1--点击“Create Repositories”按钮

2--选择要建立的类型

3--填写详细信息
Name:就是为代理起个名字
Remote Storage: 代理的地址,Maven的地址为: https://repo1.maven.org/maven2/
Blob Store: 选择代理下载包的存放路径

2)Hosted
Hosted是宿主机的意思,就是怎么把第三方的Jar放到私服上。
Hosted有三种方式,Releases、SNAPSHOT、Mixed
Releases: 通常是已经发布的Jar包
Snapshot: 未发布的版本
Mixed:混合的
Hosted的建立和Proxy是一致的,具体步骤和上面基本一致。以下:

注意事项:
Deployment Pollcy: 须要把策略改为“Allow redeploy”。

3)Group
能把两个仓库合成一个仓库来使用,目前没使用过,因此没作详细的研究。

2.3 Security
这里主要是用户、角色、权限的配置(上面已经提到了在这里添加用户和角色等)

2.4 Support
包含日志及数据分析。

2.5 System
主要是邮件服务器,调度的设置地方
这部分主要讲怎么和Maven作集成,集成的方式主要分如下种状况:代理中央仓库、Snapshot包的管理、Release包的管理、第三方Jar上传到Nexus上。

代理中央仓库
只要在PMO文件中配置私服的地址(好比http://192.168.1.14:8081)便可,配置以下:

<repositories>
        <repository>
            <id>maven-central</id>
            <name>maven-central</name>
            <url>http://192.168.1.14:8081/repository/maven-central/</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
    </repositories>

Snapshot包的管理
1)修改Maven的settings.xml文件,加入认证机制

<servers>
<server>
      <id>nexus</id>
      <username>admin</username>
      <password>admin123</password>
     </server>

2)修改工程的Pom文件

<distributionManagement>
        <snapshotRepository>
            <id>nexus</id>
            <name>Nexus Snapshot</name>
            <url>http://192.168.1.14:8081/repository/maven-snapshots/</url>
        </snapshotRepository>
        <site>
            <id>nexus</id>
            <name>Nexus Sites</name>
            <url>dav:http://192.168.1.14:8081/repository/maven-snapshots/</url>
        </site>
    </distributionManagement>

注意事项:

上面修改的Pom文件如截图中的名字要跟/usr/local/maven/conf/settings.xml文件中的名字必定要对应上。

3)上传到Nexus上

1--项目编译成的jar是Snapshot(POM文件的头部)

<groupId>com.woasis</groupId>
<artifactId>test-nexus</artifactId>
<version>1.0.0-<span style="color: #ff0000;">SHAPSHOT</span></version>
<packaging>jar</packaging>

2--使用mvn deploy命令运行便可(运行结果在此略过)

3--由于Snapshot是快照版本,默认他每次会把Jar加一个时间戳,作为历史备份版本。

Releases包的管理

1)与Snapshot大同小异,只是上传到私服上的Jar包不会自动带时间戳
2)与Snapshot配置不一样的地方,就是工程的PMO文件,加入repository配置

<distributionManagement>
        <repository>
            <id>nexus</id>
            <name>Nexus Snapshot</name>
            <url>http://192.168.1.14:8081/repository/maven-releases/</url>
        </repository>

3)打包的时候须要把Snapshot去掉

<groupId>com.woasis</groupId>
    <artifactId>test-nexus</artifactId>
    <version>1.0.0</version>
<packaging>jar</packaging>

第三方Jar上传到Nexus

[root@master-node src]# mvn deploy:deploy-file -DgroupId=org.jasig.cas.client -DartifactId=cas-client-core -Dversion=3.1.3 -Dpackag
注意事项:
-DrepositoryId=nexus 对应的就是Maven中settings.xml的认证配的名字。

7、Nexus库被删除的恢复方法 
在整理Maven私服的时候,不当心把Release库删掉了。瞬间冒出冷汗来了!脑子里闪过第一个办法就是看是否有回收站,刚好在Nexus UI中看到了一个叫Trash...的功能。但是我点击后发现只有Empty Trash的功能,这要按下去还得了啊。

最后在Sonatype Nexus官方搜索到一篇文章,原文以下:

When you delete a repository from the Nexus UI, nexus will remove the repository from any groups it belongs too and move the repository contents to 
it's trash folder. Sometimes you will want to restore this repository back into service.
To restore a deleted repository with id of 'releases':
1. mv sonatype-work/nexus/trash/releases sonatype-work/storage so that you end up with sonatype-work/storage/releases 2. Recreate the repository with the same repository id 'releases' using the repositories tab user interface. 3. Add the repository to any groups that it was in before. The act of creating the repository in the UI will force a reindex of the previous repository storage contents.

幸亏!找到了被删除文件恢复的办法。最后按照官方所提供的办法成功地恢复了被删Release库下全部的数据。操做步骤以下:

1)首先找到sonatype-work/nexus/trash 下找到你删除的库,并保存到其余地方;

2)而后经过nexus控制台点击Add,选择Hosted Repository,而后输入被删除的Repository信息;

3)把刚才保存的库文件copy到指定的sonatype-work/nexus/storage/[releases]下便可;
4)点击列表中的Public Repositories,而后在下方的Configuration标签下将Releases添加到Ordered Group Repositories中;

5)最后Save保存就能够了。

相关文章
相关标签/搜索