使用nexus搭建Maven私服

maven简介     

       Maven是一个采用纯Java编写的开源项目管理工具, Maven采用了一种被称之为Project Object Model(POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中, 通过该文件Maven可以管理项目的整个生命周期,包括清除、编译,测试,报告、打包、部署等等。目前Apache下绝大多数项目都已经采用Maven进行管理. 而Maven本身还支持多种插件, 可以方便更灵活的控制项目, 开发人员的主要任务应该是关注商业逻辑并去实现它, 而不是把时间浪费在学习如何在不同的环境中去依赖jar包,项目部署等。

仓库的概念

   仓库分为三类:  本地仓库、第三方仓库(内部中心仓库\私服)、中央仓库

   本地仓库:

          1.  maven将工程中依赖的jar包(构件)从远程下载到本地某目录下管理,通常默认存储地${user.home}/.m2/responsitory/        (Windows下可以通过%USERPROFILE%直接定位到当前用户文件夹路径下)

          2   jar包存储方式为在responsitory下groupId/artifactId/version/*.jar;

          3   修改本地仓库方式,找到$MAVEN_HOME/conf/setting.xml文件,修改配置<localRepository>即可;

          4  使用jar包时,先从本地仓库下载,如果没有就去第三方仓库,如果还没有就去中央仓库下载

     私服:

         1  公司自己设立,只为公司内部共享使用,同时减少外部访问和下载频率

         2  私服一般是第三方提供的,常见私服服务器为:Nexus和Artifactory

         3  setting.xml(全局的)或pom.xml(当前项目的)中可以同时配置多个私服地址

         4  私服要单独配置,如果没有配置,默认不使用

   中央仓库:

          1   地址为https://mvnrepository.com

          2    如果本地没有jar包并且没有配置私服,要去中央仓库下载,需要联外网 

为什么要搭建私服

    为什么要搭建nexus私服?原因很简单,很多公司由于涉密或者安全方面的考虑,开发人员是不能访问外网的,因此就不能使用maven访问远程仓库的地址,所以很有必要在局域网内找一台有外网权限的机器,搭建nexus私服,然后开发人员连到这台私服上,这样的话,就可以通过这台搭建了nexus私服的电脑访问远程仓库。

maven安装

需要提前在安装好jdk环境,不会的自行百度

下载地址 http://maven.apache.org/download.cgi 

进入  /usr/local/src/ 目录下面

     cd /usr/local/src/

执行 wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz  

解压下载好的压缩包   tar -zxvf apache-maven-3.3.9-bin.tar.gz 

移动文件夹 mv apache-maven-3.3.9 /usr/local/maven

配置maven的环境变量,在/etc/profile文件底部添加如下的内容

 #maven 环境变量
export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$MAVEN_HOME/bin

刷新一下配置文件

resouce /etc/profile

验证maven 是否配置成功,出现如下信息说明已经成功了

 mvn --version

nexus的下载和部署

  1 下载地址  http://www.sonatype.org/nexus/  下载开源版本

   

  

   选择自己适合的版本,我需要将私服搭建到阿里云服务器,所以选择unix版本

     

  由于nexus3.0 版本内存要求至少是2g,我的云服务器只有1g,尝试了多种方法,nexus 还是不能成功启动,所以以虚拟机演示

  如果内存只有的1g 的可以选择 war 包安装,将war 直接扔到tomcat的webapp目录下,直接启动tomcat即可,亲测可用

   war 下载地址   https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.14.2-01.war

 访问地址 http://39.96.69.214:8081/nexus/  ip是你部署服务器的ip 8081 是tomcat的服务端口 ,nexus 是你nexus项目文件的名称

将我们下载好的压缩包上传到 /usr/local/src/ 目录下

   进入 /usr/local/src/目录   cd /usr/local/src/

   解压文件 tar -zxvf nexus-3.16.1-02-unix.tar.gz

    将解压好的文件移动到  /usr/local/nexus目录下   mv nexus-3.16.1-02 /usr/local/nexus

   启动 nexus 如果报java 的错误,就说明当前环境没有安装jdk 或者jdk的版本太低,nexus 依赖的jdk版本最低为1.8

   进入  /usr/local/nexus/bin

  执行   ./nexus run 命令,当看到如下图所示,说明已经启动成功了

 

  通过  http://192.168.0.151:8081/ 网址就可以 访问到nexus服务

默认的账号:admin

默认密码:admin123

打开网址时,如果报一下错误,说明没有配dns域名解析服务器,不会的自行百度

如下图 所示的警告可以不用管,因为 不推荐使用root用户启动。这个告警不影响nexus的正常访问和使用

大佬说 编辑 /etc/profile文件,在末尾加上export RUN_AS_USER=root 即可去掉警告信息,我试了下,貌似没有用

注意 启动nexus 最好用  ./nexus start  前面之所以用  ./nexus run 是为了看日志

   

***************************************以下部分都是借鉴大佬的****************************************************

https://www.cnblogs.com/kevingrace/p/6201984.html

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

可以在“管理”里查看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)即可,配置如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

<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文件,加入认证机制

1

2

3

4

5

6

<servers>

<server>

      <id>nexus</id>

      <username>admin</username>

      <password>admin123</password>

     </server>

2)修改工程的Pom文件

1

2

3

4

5

6

7

8

9

10

11

12

<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文件的头部)

1

2

3

4

<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配置

1

2

3

4

5

6

<distributionManagement>

        <repository>

            <id>nexus</id>

            <name>Nexus Snapshot</name>

            <url>http://192.168.1.14:8081/repository/maven-releases/</url>

        </repository>

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

1

2

3

4

<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的认证配的名字。
参考博客地址 :https://blog.csdn.net/sdksdk0/article/details/52190619 

参考博客地址 :   https://www.cnblogs.com/hujiapeng/p/7127213.html

推荐博客  https://www.cnblogs.com/kevingrace/p/6201984.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

www.365codemall.com

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值