Maven与Nexus3.x环境构建详解
一、Maven介绍
Apache Maven是一个创新的软件项目管理和综合工具。
Maven提供了一个基于项目对象模型(POM)文件的新概念来管理项目的构建,可以从一个中心资料片管理项目构建,报告和文件。
Maven最强大的功能就是能够自动下载项目依赖库。
Maven提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期。
在多个开发团队环境时,Maven可以设置按标准在非常短的时间里完成配置工作。由于大部分项目的设置都很简单,并且可重复使用,Maven让开发人员的工作更轻松,同时创建报表,检查,构建和测试自动化设置。
Maven项目的结构和内容在一个XML文件中声明,pom.xml 项目对象模型(POM),这是整个Maven系统的基本单元。
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文件提供团队合作和帮助。
Maven主要目标是提供给开发人员:
1)项目是可重复使用,易维护,更容易理解的一个综合模型。
2)插件或交互的工具,这种声明性的模式。
二、Maven私服介绍
私服是指私有服务器,是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构建。有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。
三、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客户端,它占用较少的内存,基于简单文件系统而非数据库。
为什么要构建Nexus私服?
如果没有Nexus私服,我们所需的所有构件都需要通过maven的中央仓库和第三方的Maven仓库下载到本地,而一个团队中的所有人都重复的从maven仓库下载构件无疑加大了仓库的负载和浪费了外网带宽,如果网速慢的话,还会影响项目的进程。很多情况下项目的开发都是在内网进行的,连接不到maven仓库怎么办呢?开发的公共构件怎么让其它项目使用?这个时候我们不得不为自己的团队搭建属于自己的maven私服,这样既节省了网络带宽也会加速项目搭建的进程,当然前提条件就是你的私服中拥有项目所需的所有构件。
总之,在本地构建nexus私服的好处有:
1)加速构建;
2)节省带宽;
3)节省中央maven仓库的带宽;
4)稳定(应付一旦中央服务器出问题的情况);
5)控制和审计;
6)能够部署第三方构件;
7)可以建立本地内部仓库;
8)可以建立公共仓库
这些优点使得Nexus日趋成为最流行的Maven仓库管理器。
四、Maven的安装
1、安装Java1.8版本,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 可以先下载好后,上传至Linux服务器。
[root@localhost data]# ls jdk-8u181-linux-x64.tar.gz [root@localhost data]# tar -zxvf jdk-8u181-linux-x64.tar.gz [root@localhost data]# ls jdk1.8.0_181 jdk-8u181-linux-x64.tar.gz [root@localhost data]# vim /etc/profile .................................... export JAVA_HOME=/data/jdk1.8.0_181/ //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 .................................... [root@localhost data]# source /etc/profile //使环境变量生效。 [root@localhost data]# java -version java version "1.8.0_181" Java(TM) SE Runtime Environment (build 1.8.0_181-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
2、maven安装
下载地址:http://maven.apache.org/download.cgi [root@master-node ~]# cd /usr/local/src/ [root@master-node src]# wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz [root@master-node src]# tar -zvxf apache-maven-3.6.3-bin.tar.gz [root@master-node src]# mv apache-maven-3.6.3 /usr/local/maven 接着配置系统环境变量,在/etc/profile文件底部添加如下内容: [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/profile 最后验证是否安装成功,出现如下信息,说明安装成功 [root@master-node src]# mvn --version # 最好按照java jdk [root@maven data]# mvn --version Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f) Maven home: /usr/local/maven Java version: 1.8.0_181, vendor: Oracle Corporation, runtime: /data/jdk1.8.0_181/jre Default locale: zh_CN, platform encoding: UTF-8 OS name: "linux", version: "3.10.0-1062.4.1.el7.x86_64", arch: "amd64", family: "unix"
五、Nexus安装
Nexus的安装有两种实现方式:
1、war包安装方式
下载地址:https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-3.23.0-03.war
直接将war包放在tomcat的根目录下,启动tomcat就可以用了
2、源码安装方式(这里是新版本)
下载地址:https://www.sonatype.com/download-oss-sonatype [root@master-node ~]# cd /usr/local/src/ [root@master-node src]# wget https://sonatype-download.global.ssl.fastly.net/nexus/3/nexus-3.23.0-03-unix.tar.gz [root@master-node src]# tar -zvxf nexus-3.23.0-03-unix.tar.gz [root@maven src]# mv nexus-3.23.0-03 /usr/local/nexus [root@maven src]# cd /usr/local/nexus [root@maven nexus]# ls bin etc NOTICE.txt PRO-LICENSE.txt system deploy lib OSS-LICENSE.txt public [root@master-node src]# /usr/local/nexus/bin/nexus start //启动nexus(默认端口是8081) 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) [root@master-node src]# vim /etc/sysconfig/iptables //在部署机上的iptables里打开8081端口 .... -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,点击右上角login,提示用户与密码。在之前版本中默认用户名密码为:admin/admin123;但是在新版本中,我们将使用cat命令查看密码。
[root@maven nexus]# cat /usr/local/sonatype-work/nexus3/admin.password 2815e1e9-b308-49d4-b64f-781c0666500e
使用上述密码进行登陆,登录后需要进行管理员密码修改,如图:
登录后可以直接查看系统部门内容,包括版本等等。
也可以直接点击设置按钮,查看更多功能。包括新增用户、功能设置等等。
可以在“管理”里查看nexus的系统信息
能够查看到系统信息,包括很多,不在此列举。
六、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
注意:操作到此步骤时,发现web页面上的警告信息,点击后查看:“System Requirement: max file descriptors [65535] likely too low, increase to at least [65536].”
解决办法:
检查Linux 操作系统(CentOS7.x)上的/etc/security/limits.conf ,里面已经有了nexus - nofile 65536 这一行,但是并没有生效。
最后的解决方法是在/etc/security/limits.conf 中,注释掉原来的nexus - nofile 65536 这一行,并增加以下两行: nexus soft nofile 65536 nexus hard nofile 65536 或设置任意用户的nofile为65536: * soft nofile 65536 * hard nofile 65536
保存修改后重启Nexus,就没有上面的警告了。