Maven私服-Nexus

一、什么是私服

私服不是Maven的核心概念,它仅仅是一种衍生出来的特殊的Maven仓库,架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。
如果没有私服,我们所需的所有构件都需要通过maven的中央仓库和第三方的Maven仓库下载到本地,而一个团队中的所有人都重复的从maven仓库下载构件无疑加大了仓库的负载和浪费了外网带宽,如果网速慢的话,还会影响项目的进程。很多情况下项目的开发都是在内网进行的,连接不到maven仓库怎么办呢?开发的公共构件怎么让其它项目使用?这个时候我们不得不为自己的团队搭建属于自己的maven私服,这样既节省了网络带宽也会加速项目搭建的进程,当然前提条件就是你的私服中拥有项目所需的所有构件。

以下是有无私服的对比:

二、Nexus下载与安装

Nexus安装的先决条件:

不管是NexusOpen Source还是Nexus Professional,因为基于JAVA开发,所以需要JRE运行环境。

下载Nexus:

Nexus有2个版本,Nexus Open Source 和 NexusProfessional。
NexusOpen Source是可基于EPL协议免费使用修改分发的全功能仓库管理系统。Nexus Professional主要用于需要复杂大型企业或组织。

本文只介绍NexusOpen Source,下文简称Nexus。
Nexus下载地址,有完整版,有war版。前者可以单独运行为一个基于jetty的服务,后者是运行在ServletConstainer的Web应用。

安装Nexus

安装Nexus非常简单。解压下载的文件到任意目录,不过要小心权限问题已经Windows下带空格文件夹引起的问题。然后配置NEXUS_HOME。
解压出来的目录下除了nexus外,还有一个sonatype-work文件夹。这个文件夹包含了所有nexus的仓库以及配置数据,这么做使得更加容易更新到新版的nexus。当然,这个目录的路径也能通过NEXUS_HOME/conf/nexus.properties修改

1. 下载Nexus

官网http://www.sonatype.org/nexus/ 下载最新的Nexus。

2. Bundle方式安装Nexus

  • 首先看下解压后的目录,结构:解压后存在两个文件夹:nexus-2.4.0-01(不同版本版本号不同)和sonatype-work。nexus-2.4.0-01: 该目录包含了Nexus运行所需要的文件,如启动脚本、依赖jar包等。sonatype-work:该目录包含Nenus生成的配置文件、日志文件、仓库文件等。第一个目录是运行Nexus必须的,而第二个不是必须的,Nexus会在运行的时候动态创建该目录。

3. 运行Nexus

  1. 当你运行Nexus时,你实际运行的是一个运行在0.0.0.0:8081的web server。Nexus运行在一个Jetty的servlet容器内,然后通过一个本地的封装服务Tanuki Java Service Wrapper来启动。它可以通过配置将nexus运行为一个unix或者windows的一个服务。bin目录下的nexus或者nexus.bat就是服务的起点,通过你的系统来选择对应的版本。
  2. 配置Path,启动Nexus(在windows操作系统上)首先在环境变量path下加入如下地址:C:\nexus\nexus-2.6.2-01-bundle\nexus-2.6.2-01\bin;之后在cmd下启动Nexus服务,启动成功后,可以打开打开浏览器访问http://localhost:8081/nexus 就可以看到Nexus的界面了。8081为默认的端口号,要修改端口号可进入nexus-2.1.2-bundle\nexus-2.1.2\conf\打开nexus.properties文件,修改application-port属性值就可以了,这时你可以单击界面右上角的Login进行登录,Nexus默认管理用户名和密码为admin/admin123。
  3. 在linux上切换到/opt/nexus/nexus-2.14.0-01/bin目录下,存在nexus及nexus.bat文件,可以使用./nexus start 启动nexus,这时候可能会报错。
  • 这时候提示:

WARNING – NOTRECOMMENDED TO RUN AS ROOT

If you insist running as root, then set theenvironment variable RUN_AS_USER=root before running this script.

大概意思就是要在环境配置export RUN_AS_USER=root,临时配置

在命令行下输入:

export RUN_AS_USER=root

然后执行,就不会再提示了

./nexus start

也可以在系统里面永久配置

vi /etc/profile  加入export RUN_AS_USER=root

4. 配置Nexus为服务
启动后,你就能通过浏览器访问http://localhost:8081/nexus 
当你把Nexus用于生产环境时,你应该将Nexus配置为一个服务,让他在后台运行以及在服务器重启后恢复服务。方法是 bin/nexus start

三、常用功能

Nexus常用功能就是:指定私服的中央地址、将自己的Maven项目指定到私服地址、从私服下载中央库的项目索引、从私服仓库下载依赖组件、将第三方项目jar上传到私服供其他项目组使用。

开启Nexus服务后访问url地址http://localhost:8081/nexus, (推荐使用自己的ip地址),之后登录系统,用户名密码分别是:admin/admin123.

仓库类别:

开启Nexus服务后访问url地址http://localhost:8081/nexus/(推荐使用自己的ip地址),之后登录系统,用户名密码分别是:admin/admin123.

 

最频繁的就是点击左侧菜单栏的Repositories按钮

 

 

仓库类别:

Hosted代表宿主仓库,用来发布一些第三方不允许的组件,其中自带仓库类型中3rd一般用来发布第三方无法在中央仓库获取的jar包,比如oraclejdbcjar包,Releases一般存放公司内的封版的项目,Snapshots用来存放正在开发的版本。

Proxy代表代理远程的仓库,最典型的就是Maven官方中央仓库、JBoss仓库等等。如果构建的Maven项目本地仓库没有依赖包,那么就会去这个代理站点去下载,那么如果代理站点也没有此依赖包,就回去远程中央仓库下载依赖,这些中央仓库就是proxy。代理站点下载成功后再下载至本机。笔者认为,其实Maven这个自带的默认仓库一般情况下已经够大多数项目使用了。

group 仓库是一个“仓库组”,为开发人员便于开发设置的仓库,可以将多个已存在的其他仓库配置其中提供给大家使用,在nexus中配置的时候注意的是左侧是配置仓库组使用的仓库。

 

virtual仓库是用于提供中央仓库中M1格式的发布版本的构件镜像仓库,即在当此M2仓库中为M1格式的仓库构件缓存提供出来的。

maven项目索引

下载Maven项目索引,项目索引是为了使用者能够在私服站点查找依赖使用的功能

 

例如:

 

就可以检索出它的相关信息,包括怎么配置依赖信息。我们要想使用这个私服仓库,先在项目pom中配置相关私服信息

四、使用配置

以下为在pom中声明指定使用私服的方式:

指定仓库

<repositories> 

<repository> 

<id>nexus</id> 

<name>nexus</name> 

<url>http://192.168.1.103:8081/nexus/content/groups/public/</url> 

<releases> 

<enabled>true</enabled> 

</releases> 

<snapshots> 

<enabled>true</enabled> 

</snapshots> 

</repository> 

</repositories> 

 

指定插件仓库

<pluginRepositories> 

<pluginRepository> 

<id>nexus</id> 

<name>nexus</name> 

<url>http://192.168.1.103:8081/nexus/content/groups/public/</url> 

<releases> 

<enabled>true</enabled> 

</releases> 

<snapshots> 

<enabled>true</enabled> 

</snapshots> 

</pluginRepository> 

</pluginRepositories> 

这样只有本项目才在私服下载组件

总:

pom.xml配置私服下载如下:

在setting.xml配置私服下载如下:

 

这样这个Maven项目构建的时候会从私服下载相关依赖,当构建项目的时候,maven会从私服将构件下载到本地仓库,当然这个配置仅仅是在此项目中生效,对于其他项目还是不起作用。如果相对Maven的其他项目也生效的话。需要修改全局的settings.xml文件。

 

修改settings.xml为

<profiles>

……………

<profile> 

         <id>myprofile</id> 

         <repositories> 

               <repository> 

                   <id>central</id>                                    

                   <url>http://10.110.13.14:8081/nexus/content/groups/inspur-jszx/</url>                       

                   <releases> 

                       <enabled>true</enabled> 

                   </releases> 

                   <snapshots> 

                       <enabled>true</enabled> 

                   </snapshots> 

               </repository> 

           </repositories>    

            <pluginRepositories> 

               <pluginRepository> 

                 <id>central</id> 

                 <url>http://10.110.13.14:8081/nexus/content/groups/inspur-jszx/</url> 

                 <releases> 

                   <enabled>true</enabled> 

                 </releases> 

                 <snapshots> 

                   <enabled>false</enabled> 

                 </snapshots> 

               </pluginRepository> 

           </pluginRepositories> 

       </profile>

……………

<profiles>

 

追加激活profile

<activeProfiles> 

<activeProfile>central</activeProfile> 

</activeProfiles> 

之后所有本机的Maven项目就在私服下载组件。


五、上传

分别选中填写信息就最后Upload构件就可以了

deploy命令部署构件到Nexus

  1. 在POM中配置
<project>
  ... 
  <distributionManagement>
<snapshotRepository>
        <id>user-snapshots</id>
        <name>User Project SNAPSHOTS</name>
        <url>http://localhost:8081/nexus/content/repositories/MyUserReposSnapshots/</url>
    </snapshotRepository>
      <repository>
          <id>user-releases</id>
          <name>User Project Release</name>
          <url>http://localhost:8081/nexus/content/repositories/MyUserReposRelease/</url>
      </repository>
  </distributionManagement>
   ...
</project>

settings.xml中配置认证信息,Nexus的仓库对于匿名用户是只读的。

<servers>
 
    <server>
      <id>user-snapshots</id>
      <username>lb</username>
      <password>123456</password>
    </server>
        
    <server>
      <id>user-releases</id>
      <username>lb</username>
      <password>123456</password>
    </server>
        
  </servers>

 

注意Respository中的id一定要和server下的id一致,切记!!否则出现权限问题。

然后运行发布

mvn clean deploy

在控制台发布成功

然后进入到私服上的仓库中,看一下确实存在刚刚发布的项目

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值