芝法酱学习笔记(0.6)——nexus与maven私库

一、私库的需求

在一个公司中,后端程序员通常几十上百个。在没有镜像私库的情况下,每当引入新库时,大家都会从maven中央仓库下载一遍这个库。这样无疑十分浪费。再加之国家的防火墙政策,许多人下载lib包可能还会十分缓慢。不同程序员会配置不同的国内镜像,有些缺乏经验的小伙伴会因为配错而程序跑不起来,这都大大降低了项目组开发的效率。

有时,公司自己会开发一些自家公司专属的lib包,推高公司的技术力。这些lib包并不想让其他公司的竞争者使用,这时通常会把这种lib包放在公司内网。我们不希望在IDEA里手动引用这些lib包,想让这些lib包和其他maven的引用方法一致。

这时,nexus就应运而生。

二、nexus的安装

2.1 下载安装

首先,我们可以去官网下载,下载后的包名叫nexus-3.72.0-04-unix.tar.gz。

把这个包拷贝到linux机器的/WORK/DOWNLOADS中

bash 复制代码
cd /WORK/DOWNLOADS
tar -xzvf nexus-3.72.0-04-unix.tar.gz -C "/WORK/SOFTWARE"
cd /WORK/SOFTWARE
mkdir nexus
#然后,把那两个包移动到nexus里,一个改名为3.72,一个改名为sonatype-work

此时,已经安装好了。

2.2 配置启动

首先,先介绍一下nexus的一些重要配置文件

文件路径 作用
3.72/bin/nexus nexus的启动脚本
3.72/bin/nexus.vmoptions nexus的JVM配置
3.72/etc/nexus-default.properties nexus的配置

2.2.1 nexus-default.properties配置

bash 复制代码
application-port=8889 #端口,这个得改了,8081
application-host=0.0.0.0
nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-requestlog.xml
nexus-context-path=/nexus #这个也很重要,为了配置到nginx后面

# Nexus section
nexus-edition=nexus-pro-edition
nexus-features=\
 nexus-pro-feature

2.2.2 nginx配置

/WORK/APP/nginx/conf/nginx.conf

bash 复制代码
		location /nexus/ {
                proxy_pass http://127.0.0.1:8889;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_read_timeout 90;

                # 解决Nexus重定向问题,将 /nexus/ 路径传递给Nexus
                #proxy_redirect http://localhost:8889/ /nexus/;
        }

启动程序

bash 复制代码
sysyemctl reload openresty
cd /WORK/SOFTWARE/nexus/3.72/bin
nexus start

2.2.3 自启动配置

bash 复制代码
useradd nexus
passwd nexus
vim /lib/systemd/system/nexus.service

做如下配置

bash 复制代码
[Unit]
Description=Nexus Repository Manager
After=network.target

[Service]
WorkingDirectory=/WORK/SOFTWARE/nexus/3.72

Type=forking
User=nexus      # Nexus运行的用户,建议使用专用用户
Group=nexus     # Nexus运行的用户组

# 设置Nexus安装目录和启动脚本
ExecStartPre=/bin/bash -c 'source /etc/profile'
ExecStart=/bin/bash -c 'source /etc/profile && /WORK/SOFTWARE/nexus/3.72/bin/nexus start'
ExecStop=/WORK/SOFTWARE/nexus/3.72/bin/nexus stop
Restart=on-abort

[Install]
WantedBy=multi-user.target
bash 复制代码
systemctl daemon-reload

2.2.4 配置阿里云镜像

由于国内有墙的原因,可以加一个阿里云镜像

在管理界面,新增一个仓库

选择maven2 proxy类型的

而后把url设置为:https://maven.aliyun.com/repository/public

然后,修改maven-public中的组,把阿里云的放在最上面

三、私库实践

3.1 试试从私库下载

首先,我们设置一下nexus下载jar包的位置,我把位置设置在/WORK/SDK/JAVA/nexus的位置下

记得更改文件夹的所属权限(因为我用nexus用户启动的)

bash 复制代码
chown -R nexus /WORK/SDK/JAVA/nexus

更改maven的配置

我的maven放在/WORK/SOFTWARE/maven

maven的配置文件做如下修改:

注意:我这里jenkins和nexus放在一个服务器里的,所以用localhost。如果不是的话,建议使用内网ip:端口

xml 复制代码
<mirrors>
	<mirror>
      <id>nexus-repo</id>
      <mirrorOf>*</mirrorOf>
      <name>nexus. private maven repository</name>
      <url>http:localhost:8889/nexus/repository/maven-public</url>
    </mirror>
</mirrors>

<servers>
    <!--该账号是普通开发者用的-->
	<server>
    	<id>nexus-repo</id>
    	<username>developer</username>
    	<password>???@1314</password>
    </server>
	<!--该账号是向私库上传包用的-->
	<server>
      <id>nexus-repo-main</id>
      <username>main-developer</username>
      <password>???@1314</password>
    </server>
</servers>

<profiles>
    <profile>
      <repositorys>
        <repository>
          <id>nexus-repo</id>
          <url>http://localhost:8889/nexus/repository/maven-public/</url>  <!-- Nexus 私库的地址 -->
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </repository>
      </repositorys>
    </profile>
</profiles>

为了验证是否生效,我们把本地仓库的jar包全删了

bash 复制代码
rm -r /WORK/SDK/JAVA/reposity/*

再次使用jenkins编译项目,观察现象。

可以发现,jar包均从私库下载了

3.2 study2024 改造

本次,我们打算把core包分离成一个单独的项目,并且把编译好的包传到私库。

其他应用的服务,直接引用私库的core包即可,使业务开发人员不比关心那些底层细节

由于篇幅原因,本节不便赘述,还是请大家移步码云
这是原先的core包

这里多说一点,all包,仅仅就是把所有的包引用一下,方便应用程序引用
这是原先的业务包

3.3 把study2024的core包传上私库

3.3.1 zhifa-engine的pom配置

只需要在织法引擎项目中的根pom里,加入如下配置,使其中的服务id和打包机上maven配置的服务Id对应上。

如果我们设置的版本号,是snapshot时,deploy就会自动走snapshot模式。

由于本系列是学习用的,就不那么讲究了,全用正式的。当改代码时,如果没升版本,记得把本地仓库的jar包删删,不然可能会出错

xml 复制代码
<distributionManagement>
        <repository>
            <id>nexus-repo-main</id>
            <url>http://localhost:8889/nexus/repository/maven-releases/</url>
        </repository>
        <snapshotRepository>
            <id>nexus-repo-main</id>
            <url>http://localhost:8889/nexus/repository/maven-snapshots/</url>
        </snapshotRepository>
    </distributionManagement>

3.3.2 jenkins 管线命令

勾选This project is parameterized,添加如下参数

参数名 默认值 描述
module all 上传哪个模块,可选项有common,enum-memo,mp-enhance,all
gitTag master git分支
python 复制代码
node{

    stage("拉取代码"){
        git branch: "${gitTag}", credentialsId: 'gitSec', url: 'https://gitee.com/hataksumo/study2024-class005.git'
    }
    
    stage("编译项目"){
        sh """
            cd zhifa-engine
            mvn clean package -pl ${module} -am -Dmaven.test.skip=true
        """
    }
    
    stage("上传私库"){
        if(module == "all"){
            sh """
                cd zhifa-engine
                mvn deploy
            """
        }else{
            sh """
                cd zhifa-engine
                mvn deploy -pl ${module}
            """
        } 
    }
}
相关推荐
暮湫6 分钟前
泛型(2)
java
南宫生15 分钟前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
转码的小石23 分钟前
12/21java基础
java
李小白6631 分钟前
Spring MVC(上)
java·spring·mvc
GoodStudyAndDayDayUp44 分钟前
IDEA能够从mapper跳转到xml的插件
xml·java·intellij-idea
装不满的克莱因瓶1 小时前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb
n北斗1 小时前
常用类晨考day15
java
骇客野人1 小时前
【JAVA】JAVA接口公共返回体ResponseData封装
java·开发语言
yuanbenshidiaos2 小时前
c++---------数据类型
java·jvm·c++
向宇it3 小时前
【从零开始入门unity游戏开发之——C#篇25】C#面向对象动态多态——virtual、override 和 base 关键字、抽象类和抽象方法
java·开发语言·unity·c#·游戏引擎