简介

  • maven的私服,其实有三种专门的maven仓库管理软件可以帮助我们创建私服,这里重点介绍nexus。
  • 说是私服,其实就是maven的一个远程仓库。
  • 我们知道maven有本地仓库和中央仓库,那么nexus是什么样的仓库呢?
  • 一个项目需要插件的时候回先去本地仓库找,没有再去中央找,找到后下载到本地后再使用。
  • nexus实际是架设在局域网内的仓库服务,它代理广域网上的所有的中央仓库,供局域网内的maven用户使用。
  • 就好比外部所有的“中央仓库”是一个大的油库,自己家里有个油壶,家里的这个小油壶就是“本地仓库”,nexus就是在中间建立的一个小的中转站——商店。这样,外部的所有油库都可以把油放到商店中,我们根据需要把油打到油壶里面。
  • maven访问中央是需要外网支持的,在不提供外网或者网速很慢的情况下,很有必要在局域网内搭建nexus私服,让它代理广域网上的中央仓库。
  • 所以,当项目中需要某些插件的时候,它会先去本地仓库查找,没有就从nexus请求,如果私服nexus也没有,则从外部的中央仓库下载,缓存到nexus中,再下载到本地仓库中供项目使用。此外,一些无法在中央仓库下载的插件也能从本地上传到nexus中供使用。

安装

  • 目前安装在E盘。
  • 访问官网点击Products下拉Nexus Repository OSS
  • 点击红色按钮
  • 下载2.x版本比较好,拉到最下面
  • 这个就行了
  • 以管理员身份运行start.dat,记住一定要管理员
  • 点击右上角log in,默认用户名:admin,密码:admin123
  • 然后开始下载nexus索引的更新
  • 我们不在这个网站上直接下载,我们自己找安装包下载
  • 首先下载indexer-cli-5.1.1.jar包
  • 然后到[这个网址]拉到最后下载这个
  • 都下载到同一个目录下,然后在cmd中进入此目录运行:

    java -jar indexer-cli-5.1.1.jar -u nexus-maven-repository-index.gz -d indexer
    
  • 需要较久时间,运行完后会出现一个indexer文件夹,把它copy到E:\nexus-2.10.0-02-bundle\sonatype-work\nexus\indexer\central-ctx,全部覆盖,然后重启nexus,到刚才那个网站上就可以看到
  • 接下来我们整合maven和nexus
  • 到maven的安装目录下找到settings.xml(应该有两个,一个是原本的,一个是自己的仓库的,两个都要)
  • 添加私服仓库
  • *的意思是所有的请求都走这个镜像
  • 上面的url相当于下面第一个的Path
  • 配置
  • idea端如果还是有一些依赖找不到的话,点击settings,把两个仓库都给update了,remoteupdate不了也没关系
  • 上面setting.xml修改之后,在idea中运行maven install或其他指令,如果日志显示jar包是通过我们配置的url来下载的话,那么配置就算成功
  • 否则直接把setting.xml替换成下面这样:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
    
        <localRepository>E:/java/maven/maven-dependcies</localRepository>
    
        <servers>
        <server>
            <id>nexus</id>
            <username>admin</username>
            <password>admin123</password>
        </server>
        <server>
            <id>releases</id>
            <username>admin</username>
            <password>admin123</password>
        </server>
        <server>
            <id>snapshots</id>
            <username>admin</username>
            <password>admin123</password>
        </server>
    
      </servers>
    
  <mirrors>       
    <mirror>  
        <id>nexus</id>     
        <mirrorOf>*</mirrorOf>     
        <url>http://localhost:8081/nexus/content/groups/public</url> <!--这一行如果注释掉的话则默认直接从远程仓库下载,而不经过私服-->    
    </mirror>       
  </mirrors>


  <profiles>
     <profile>
      <id>nexus</id>     
      <repositories>
        <repository>
          <id>central</id>
           <url>http://central</url>
          <releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases>
      <snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots>
        </repository>
      </repositories>
     <pluginRepositories>
        <pluginRepository>
          <id>central</id>
           <url>http://central</url>
         <releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases>
      <snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>

    <activeProfiles>
     <activeProfile>nexus</activeProfile>
    </activeProfiles>

</settings>

非中央仓库的jar包无法获取到

  • 有些jar包由于版权问题,中央仓库中没有,比如Oracle JDBC驱动、一些比较老的开源jar包等,我们需要手动把它们上传到私服。
  • 自己公司开发的jar包并不开源,也需要手动上传
  • 到Maven Repository查找该jar并下载以下4个文件到本地仓库即可(不过放在哪个文件夹下要自己搞清楚)

私服的数据源

  • 配置完不知道要不要重启动的说

lastUpdate文件

  • maven下载jar包失败会生成这样一个文件,这个需要删掉,maven才会重新尝试下载jar包
  • 删掉之后在idea中reimport,如果多次尝试都像上面一样失败的话,大多是出于网络原因,可以直接把setting.xml的url注释掉,这样就会直接取到相应的远程中央仓库下载,应该就能成功。最后再取消注释即可。