• Nexus3创建maven私服


    关注我 「Java之康庄大道」精彩文章第一时间推送给你

    Java之康庄大道

    bin目录下启动 | 停止

    ./nexus start | stop

    用户名密码

    admin 初始密码在仓库路径中sonatype-work的admin.password文件中,启动成功之后就可以访问localhost:{port},填入初始密码之后admin.password文件就失效了,系统会要求设置新密码

    配置

    如果你只用于一个项目,可以在pom中配置

    <repositories>
        <repository>
            <id>maven-nexus</id>
            <name>maven-nexus</name>
            <url>http://ip:8081/repository/maven-public/</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
    </repositories>
    

    如果多个项目中,可以直接在 settings.xml中配置

        <profiles>
            <!--单个仓库配置,可配置多个-->
            <profile>
                <id>nexus</id>
                <repositories>
                    <repository>
                        <id>my-nexus</id>
                        <name>Nexus</name>
                        <url>http://ip:8081/repository/maven-public/</url>
                        <releases>
                            <enabled>true</enabled>
                        </releases>
                        <snapshots>
                            <enabled>true</enabled>
                            <updatePolicy>always</updatePolicy>
                        </snapshots>
                    </repository>
                </repositories>
            </profile>
        </profiles>
        <!--选择哪个仓库配置生效-->
        <activeProfiles>
            <activeProfile>nexus</activeProfile>
        </activeProfiles>
    

    发布配置

    首先配置账户密码在 settings.xml

      <servers> 
    	  <server>  
          <id>releases</id>  
          <username>admin</username>  
          <password>admin123</password>  
    	  </server>  
    	  <server>  
          <id>snapshots</id>  
          <username>admin</username>  
          <password>admin123</password>  
    	  </server>
      </servers>
    

    在pom中配置

    <distributionManagement>
            <snapshotRepository>
                <id>snapshots</id>
                <name>Nexus Snapshot</name>
                <url>http://ip:8081/repository/maven-snapshots</url>
            </snapshotRepository>
            <repository>
                <id>releases</id>
                <name>Nexus Release</name>
                <url>http://ip:8081/repository/maven-releases</url>
            </repository>
        </distributionManagement>
    

    然后执行下面的命令跳过测试打包发布到私服

    mvn clean deploy -Dmaven.test.skip=true
    

    目录介绍

    简单说一下这些仓库是干嘛的:

    • maven-central:注意这个类型是proxy,这是一个远程仓库的代理。什么意思呢?就是说如果私服中不存在我们要下的jar包,它会从远程仓库中下载过来放在这个仓库,默认是从Maven中央仓库下载,http://repo1.maven.org/maven2/,我觉得可以配置从国内镜像下载,要不然第一次从私服下载还是会很慢。试了一下没成功,可能是我没配好,有兴趣可以试一下。

    • maven-public:这个仓库类型是group,表示是一个组,也就是可以是其他几个仓库的组合,为了可以对外提供一个统一的地址。默认包括maven-central,maven-releases,maven-snapshots 这三个仓库。

    • maven-releases:仓库类型是hosted,表示是一个宿主仓库,我们自己项目的构件就可以放在这个仓库,也可以放第三方的jar包,注意这个仓库放的是release版本的。

    • maven-snapshots:这个仓库也是hosted,跟上面那个一样,不同的是这个仓库放的是snapshot版本。

    再说一下release 和 snapshot 的区别

    release 表示的是稳定版,snapshot是一个开发中的快照版。

    假如你的同伴依赖你的模块进行开发,如果你没有用snapshot,那么你每次修改完代码发布到私服中,你的同伴都需要把本地仓库的jar包先删掉再重新更新才会是最新的代码,或者你在发布到私服之前每次都要修改POM文件的版本号,显然这是不合理的。但是如果用了snapshot版的话,发布到私服中的jar包名字后面会自动带有时间戳。这个时候你的同伴就能自动更新最新的snapshot版本。

    新增阿里云和第三方库

    阿里云库远程位置http://maven.aliyun.com/nexus/content/groups/public 选择proxy
    第三方库需要选择Allow redeploy允许部署和更新,选择 hosted

    如上图所示,私服依赖按照前后顺序排好,按照此顺序进行引用依赖。

    介绍三个类型库

    • hosted,本地仓库,通常我们会部署自己的构件到这一类型的仓库。比如公司的第二方库。

    • proxy,代理仓库,它们被用来代理远程的公共仓库,如maven中央仓库。

    • group,仓库组,用来合并多个hosted/proxy仓库,当你的项目希望在多个repository使用资源时就不需要多次引用了,只需要引用一个group即可。

    镜像设置

    镜像会对仓库的请求进行过滤,也就是说当我们下载依赖的时候,如果镜像中存在,就直接从镜像中下载。
    国内阿里的镜像:

    <mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
    

    id:是镜像的标识
    mirrorOf:被镜像仓库的id,例如central标识替代中央仓库,google标识替代谷歌套件仓库

    • 问题1:那么就产生一个问题了,都已经有仓库了为什么需要镜像呢?

    我理解的镜像其实就是对仓库的集合。可以一次性解决多个仓库的配置。

    • 问题2:那么我们直接配置镜像了,还需要配置仓库吗?有时候需要

    比如,镜像中不存在对应的依赖,那我们就要独立配置仓库了,还有就是我们要上传jar也要配置仓库。

    • 问题3:这么多途径获取依赖,那么一个依赖到底从哪里途径获取呢?

    首先本地仓库没有,然后要经过镜像,没有,找自己配置的仓库,如果没有再去找中央仓库。

    如何把本地maven库上传nexus3私服

    • 创建一个hosted类型的maven2仓库在nexus3上,比如叫做my-repo

    • 设置Version policy 为 Mixed

    • 设置Deployment policy 为 Allow redeploy

    • 可以把my-repo 加到 maven-public里

    • 在本地maven库需要上传的根目录下创建文件

      vi mavenimport.sh
      
    • 文件内容如下

      #!/bin/bash
      # copy and run this script to the root of the repository directory containing files
      # this script attempts to exclude uploading itself explicitly so the script name is important
      # Get command line params
      while getopts ":r:u:p:" opt; do
          case $opt in
              r) REPO_URL="$OPTARG"
              ;;
              u) USERNAME="$OPTARG"
              ;;
              p) PASSWORD="$OPTARG"
              ;;
          esac
      done
        
      find . -type f -not -path './mavenimport\.sh*' -not -path '*/\.*' -not -path '*/\^archetype\-catalog\.xml*' -not -path '*/\^maven\-metadata\-local*\.xml' -not -path '*/\^maven\-metadata\-deployment*\.xml' | sed "s|^\./||" | xargs -I '{}' curl -u "$USERNAME:$PASSWORD" -X PUT -v -T {} ${REPO_URL}/{} ;
      
    • 给文件添加可执行权限

    chmod +x mavenimport.sh
    
    • 执行如下命令即可上传本地maven库到nexus3
    ./mavenimport.sh -u admin -p password -r http://127.0.0.1:8081/repository/my-repo/
    
  • 相关阅读:
    VMware下桥接设置
    Silverlight 样式的灵活使用
    Silverlight网页打开后马上崩溃,“白屏”,而且毫无提示
    Silverlight中字典的使用
    WEBGIS网页崩溃问题分析
    MDB数据类型注意事项
    使用浏览器开发着工具查看地图或影响的请求信息
    ArcGIS出图调整
    启动aspx文件错误
    hdu3555(数位DP dfs/递推)
  • 原文地址:https://www.cnblogs.com/yunqing/p/16131841.html
Copyright © 2020-2023  润新知