Ubuntu16.04.6下搭建Maven私服仓库

下载Nexus

apt-get update
docker pull sonatype/nexus3
cd /usr/local/
mkdir docker
cd docker
mkdir nexus
cd nexus
vim docker-compose.yml 内容如下
version: '3.1'
services:
  nexus:
    restart: always
    image: sonatype/nexus3
    container_name: nexus
    ports:
      - 8081:8081
    volumes:
      - /usr/local/docker/nexus/data:/nexus-data

使用下面的命令(docker-compose up -d)启动后会在当前目录生产data目录,需要加上读写权限
chmod 777 data -R

安装 Docker-compose

apt-get install docker-compose
docker-compose version
	docker-compose version 1.17.1, build unknown
	docker-py version: 2.5.1
	CPython version: 2.7.17
	OpenSSL version: OpenSSL 1.1.1  11 Sep 2018

或者不安装Docker-compose直接使用命令启动

docker run -d -p 8081:8081 --name nexus -v /usr/local/docker/nexus/data:/nexus-data --restart=always sonatype/nexus3

启动容器(nexus)

  • 在上述的yam文件同级目录下执行
docker-compose up -d

查看容器信息

docker inspect nexus

nexus 使用实战

添加仓库

  • 前提:上面的依赖已经安装完成,并已经启动nexus服务。
  • 第一次启动时较慢,网页可能没有反应,请多等待一会儿,大约2min左右吧,后续再重启就快了。
  • 打开网页输入10.0.1.189:8081 ,未输入登录密码时显示如下
    Ubuntu16.04.6下搭建Maven私服仓库_第1张图片
  • 点击“Sign in”登录,输入用户名 admin,密码是随机的,需要登录服务器查看,在服务的/usr/local/docker/nexus/data/admin.password里面,不是加密的是明文,复制明文密码登录。
  • 登录后,按照提示修改密码,例如修改成admin123,登录后的界面如下
    Ubuntu16.04.6下搭建Maven私服仓库_第2张图片

添加“maven2(hosted)”仓库

Ubuntu16.04.6下搭建Maven私服仓库_第3张图片

默认安装有以下这几个仓库,在控制台也可以修改远程仓库的地址,第三方仓库等。

  • hosted:宿主仓库库或托管资源库。

    • 存放本公司开发的jar包,可是正式版本也是是测试版本
    • 放在本地的资源库,零零散散的jar
    • 从远程仓库中下不到,只能自己在网上找,找到jar下载下来,放在托管资源库中,交给nexus统一管理。
  • proxy:代理仓库或代理资源库。

    • 代理中央仓库、Apache下测试版本的jar包。
    • 配置了外网的maven远程仓库地址的资源库,本地找不到,就会通过代理资源库中的地址,找到远程仓库,从远程仓库中下载所需要的jar,比如从阿里的仓库下载。
  • group:组仓库或组资源库。

    • 使用时连接组仓库,包含Hosted(宿主仓库)和Proxy(代理仓库)
    • 组资源库中并没有jar包
    • 而是把代理资源库和托管资源库统一配置到组资源库中,然后组资源库作为一个唯一的public提供给所有人使用。
    • 建议使用该方式,既可以下载私服jar包,也可以下载中央仓库或阿里等其他服务的,前提是需要将这些添加到该组中。
  • 先创建一个宿主仓库,选择 maven2(hosted),如下
    Ubuntu16.04.6下搭建Maven私服仓库_第4张图片

  • 之后填写name,自定义但不要与其他名字冲突即可;Version policy选择release,否则通过web界面的upload环节无法显示该仓库,也就无法通过界面上传jar包了;Deployment policy选择 Allow redeploy,否则无法重新发布。如下

Ubuntu16.04.6下搭建Maven私服仓库_第5张图片

添加“maven2(proxy)”仓库

  • 创建仓库时选择maven2(proxy)类型,填写name和url(http://10.0.1.189:8081/repository/alimaven/)即可,如下
    Ubuntu16.04.6下搭建Maven私服仓库_第6张图片### 创建“maven2(group)”仓库
  • 创建仓库时选择maven2(group)类型,填写name和过滤条件即可
  • 过滤条件为上面添加的两个库,添加顺序影响mvn依赖库下载时的搜索顺序,建议宿主库优先,其次是阿里库,如下

Ubuntu16.04.6下搭建Maven私服仓库_第7张图片

私服的库准备完成后开始通过maven使用

配置maven的setting.xml文件

  • setting.xml 在maven的安装目录的conf目录下
  • 配置“servers”标签,目的是标识使用的私服用户名密码和ID
  • 配置“mirror”标签,目的是标识私服地址,如下

<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">
  <pluginGroups>pluginGroups>
  <proxies>proxies>
  <servers>
    <server>
      <id>dilu-groupid>
      <username>adminusername>
      <password>admin123password>
    server>
  servers>
  <mirrors>    
    <mirror>
      <id>dilu-groupid>
      <name>nexus public repositoriesname>
      <url>http://10.0.1.189:8081/repository/dilu-group/url>
      <mirrorOf>*mirrorOf>
    mirror>
  mirrors>
  <profiles>profiles>
settings>
  • 这里的ID配置成“dilu-group”,“alimaven”和“dilu-release”就都由该组库管理
  • 假如在工程中执行 mvn package时,会依次从dilu-release、alimaven仓库中搜索依赖的jar包

上传jar包

  • 不是一定需要上传的,只有那些从中央仓库中无法下载到的jar才建议上传托管的
  • 无法从中央仓库下载的jar可以放到上面创建的宿主仓库中进行管理

选择宿主仓库进行上传

  • 进入上传页面,选择对应的宿主仓库
    Ubuntu16.04.6下搭建Maven私服仓库_第8张图片
  • 进入仓库后添加jar包
    Ubuntu16.04.6下搭建Maven私服仓库_第9张图片
    • upload界面不显示组库,目前只显示release版本的素组仓库,所以只能看到我们刚才添加的dilu-release,本次也是上传到该库
    • Group ID,可以自定义,主要影响的是代码中import时的路径,可以重复。
    • Artifact ID,可以自定义,主要用于maven下载依赖时可以跟Group ID一起确唯一的jar包
    • Version,jar包版本,版本只能是发布的版本,例如不能是1.27-SNAPSHOT版本,否则上传失败,nexus暂时不支持通过web界面上传非稳定版本的jar包,如果需要传非稳定版本可以通过maven命令行的方式,文章最后将详细介绍这种方式。
  • 上传完jar包后可以通过如下界面查看
    Ubuntu16.04.6下搭建Maven私服仓库_第10张图片
  • 进入指定库,查看具体的jar信息
    Ubuntu16.04.6下搭建Maven私服仓库_第11张图片

SNAPSHOT版本上传私服和使用

  • dilu-release可以通过UI界面上传(见上文),但是snapshot版本的jar包无法传到release仓库中,所以才有了这部分讲解,通过添加snapshot仓库,上文已经加了,这里配置上即可。另外顺便也把dilu-release配置上,使用非UI界面也可以发布到该release仓库了。
  • 基于上文继续讲解,目前已经添加了代理服务器alimave、dilu-release、dilu-snapshot
  • 配置maven的setting.xml文件


<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">
  <pluginGroups>
  pluginGroups>

  <proxies>
  proxies>

  <servers>
    <server>
      <id>dilu-releaseid>
      <username>adminusername>
      <password>admin123password>
    server>
    <server>
      <id>dilu-snapshotid>
      <username>adminusername>
      <password>admin123password>
    server>
  servers>

  <mirrors>    
    <mirror>
      <id>dilu-groupid>
      <name>nexus public repositoriesname>
      <url>http://10.0.1.189:8081/repository/dilu-group/url>
      
      <mirrorOf>*mirrorOf>
    mirror>
  mirrors>

  <profiles>
    <profile>
      
      <id>dilu-releaseid>
      <repositories>
        <repository>
          
          <id>dilu-release-1id>
          
          <url>http://10.0.1.189:8081/repository/dilu-release/url>
          <releases>
            <enabled>trueenabled>
          releases>
        repository>
      repositories>
    profile>
		
    <profile>
      
      <id>dilu-snapshotid>
      <repositories>
        <repository>
          
          <id>dilu-snapshot-1id>
          
          <url>http://10.0.1.189:8081/repository/dilu-snapshot/url>
          <releases>
            <enabled>trueenabled>
          releases>
          <snapshots>
            <enabled>trueenabled>
            <updatePolicy>alwaysupdatePolicy>
          snapshots>
        repository>
      repositories>
    profile>

  profiles>

  <activeProfiles>
    <activeProfile>dilu-snapshotactiveProfile>
    <activeProfile>dilu-releaseactiveProfile>
  activeProfiles>

settings>
  • 详细说明

    • 配置文件中基于上文中的“dilu-group”,增加servers、profiles、activeProfiles标签的配置
      • servers标签说明发布仓库的用户名和密码,使用mvn命令发布时要用到用户名和密码,该用户名和密码就是登陆nexus界面的用户名和密码
      • profiles标签说明发布仓库的地址
      • activeProfiles标签用于激活profiles标签中配置的仓库,否则profiles标签中配置的仓库不生效
    • 说明
      • dilu-group组仓库中包含了dilu-snapshot、dilu-release、alimaven(该仓库是代理阿里云的仓库,不支持发布到该仓库中,所以不需要配置这些标签–servers、profiles、activeProfiles)
      • mvn package 编译下载依赖时,添加mirrors标签,配置dilu-group组即可,之后所有的依赖都会从这组里的所有仓库中获取
      • 如果需要发布jar包到上述组中,则需要配置servers、profiles、activeProfiles标签,主要将非代理仓库dilu-snapshot、dilu-release对开发者开放
  • 实战上传snapshot版本的jar包到dilu-snapshot仓库,以fastdfs为例

    • 必须使用源代码编译,再发布。从github下载,git clone https://github.com/happyfish100/fastdfs-client-java.git
    • 进入目录,编译jar包,本次生成了./target/fastdfs-client-java-1.29-SNAPSHOT.jar
    • 使用mvn deploy:deploy-file 命令发布jar包,mvn执行必须和pom.xml在同级目录
    • 注意-DrepositoryId使用的名称跟setting.xml配置文件里对应字段的关系,如果没有 -Durl和-DrepositoryId字段则默认发布到本地仓库中(~/.m2目录下)
      mvn deploy:deploy-file -DgroupId=org.csource -DartifactId=fastdfs-client-java -Dversion=1.29-SNAPSHOT -Dpackaging=jar -Dfile=./target/fastdfs-client-java-1.29-SNAPSHOT.jar -Durl=http://10.0.1.189:8081/repository/dilu-snapshot/ -DrepositoryId=dilu-snapshot --errors --debug
      
  • 扩展:

    • 当然上面的命令也可以用于发布jar包到release库
      mvn deploy:deploy-file -DgroupId=org.csource -DartifactId=fastdfs-client-java -Dversion=1.29-SNAPSHOT -Dpackaging=jar -Dfile=./target/fastdfs-client-java-1.29-SNAPSHOT.jar -Durl=http://10.0.1.189:8081/repository/dilu-release/ -DrepositoryId=dilu-release --errors --debug
      
    • 复用当前pom.xml也可以发布其他不相关的jar包,例如
      mvn deploy:deploy-file -DgroupId=org.csource -DartifactId=mysql-connector-java -Dversion=5.1.39 -Dpackaging=jar -Dfile=/home/huangzg/.m2/repository/mysql/mysql-connector-java/5.1.39/mysql-connector-java-5.1.39.jar -Durl=http://10.0.1.189:8081/repository/dilu-release/ -DrepositoryId=dilu-release --errors --debug
      

参考资料

  • https://www.cnblogs.com/endv/p/11204704.html
  • https://www.cnblogs.com/wbl001

你可能感兴趣的:(部署,linux,maven)