centos8搭建maven私服(含nexus-3.28.1-01.tar.gz下载链接)

简介

maven

Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具,它包含了一个项目对象模型 (Project Object Model)、一组标准集合、一个项目生命周期(Project Lifecycle)、一个依赖管理系统(Dependency Management System)和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
Maven是优秀的依赖管理工具,能轻松地解决繁杂的Java类库的依赖关系。Maven是标准化的构建流程,暴露了一组一致、简洁的操作接口,能帮助团队成员从原来的高度自定义的、复杂的构建系统中解脱出来,使用maven现有的成熟的、稳定的组件也能简化构建系统的复杂度。
Maven是项目信息管理工具,能有效管理原本分散在项目中各个角落的项目信息,包括项目描述、开发者列表、版本控制系统地址等,另外还能通过Maven自动生成项目站点、项目文档、测试报告等非常具有价值的项目信息。

maven私服

私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的用户使用。当Maven需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部远程仓库下载,缓存在私服上之后,再为Maven的下载请求提供服务。
私服的好处:

  • 节省自己的外网带宽
  • 加速Maven构建
  • 部署自己内部的第三方构件
  • 提高稳定性,增强控制
  • 降低中央仓库的负荷
  • 控制和审计
  • 建立本地内部公用仓库

仓库简介

在这里插入图片描述
如上图所示:
对于Maven来说,仓库只分为两类:本地仓库和远程仓库
当Maven根据坐标寻找构件的时候,它首先会查看本地仓库,如果 本地仓库存在此构件,则直接使用;如果本地仓库不存在此构件,Maven就会去远程仓库查找,发现需要的构件,下载到本地仓库再使用。如果本地仓库和远程仓库都没有,Maven就会报错。 私服仓库的工作流程如图:
在这里插入图片描述

Nexus仓库类型介绍

  • hosted本地仓库,通常我们会部署自己的构件到这一类型的仓库。比如公司的第二方库。
  • proxy代理仓库,它们被用来代理远程的公共仓库,如maven中央仓库。
  • group仓库组,用来合并多个hosted/proxy仓库,当你的项目希望在多个repository使用资源时就不需要多次引用了,只需要引用一个group即可。

Nexus预定义了3个本地仓库,分别是Releases、Snapshots和3rd Party。 分别讲一下这三个预置的仓库都是做什么用的:

  • Releases:这里存放我们自己项目中发布的构建,通常是Release版本的,比如我们自己做了一个FTP Server的项目,生成的构件为ftpserver.war,我们就可以把这个构建发布到Nexus的Releases本地仓库。
  • Snapshots这个仓库非常的有用,它的目的是让我们可以发布那些非release版本,非稳定版本,比如我们在trunk下开发一个项目,在正式release之前你可能需要临时发布一个版本给你的同伴使用,因为你的同伴正在依赖你的模块开发,那么这个时候我们就可以发布Snapshot版本到这个仓库,你的同伴就可以通过简单的命令来获取和使用这个临时版本。
  • 3rd Party:顾名思义,第三方库,你可能会问不是有中央仓库来管理第三方库吗,没错,这里的是指可以让你添加自己的第三方库,比如有些构件在中央仓库是不存在的,比如你在中央仓库找不到Oracle的JDBC驱动,这个时候我们就需要自己添加到3rdparty仓库。

私服搭建

这里简单说明 Linux 下的安装方式,如果下载的是最新版本,它对系统内存和 jdk 版本是有要求的,要求内存大于4G,jdk 最低是1.8版本。

环境

jdk:1.8.0_271
maven:Apache Maven 3.6.3

本机是安装好了jdk和maven的,如果是未安装可以参考centos8使用war包安装部署jenkins以及初始化配置 这篇文章,这个里面有详细的安装配置过程。

安装nexus

创建目录

[root@dxm28 ~]# mkdir -p /data/nexus
[root@dxm28 ~]# cd /data/nexus/

下载

从sonatype上下载特别慢,所以我把下载好的包放在了百度网盘,分享一下,有需要的可以自取。

链接: https://pan.baidu.com/s/1NZPuzDQefsCa-zwc2wHKHA
密码: 5n2t

latest-unix.tar.gz就是nexus-3.28.1-01-unix.tar.gz。

[root@dxm28 nexus]# wget https://download.sonatype.com/nexus/3/latest-unix.tar.gz
[root@dxm28 nexus]# ll -h

在这里插入图片描述

拷贝压缩文件至/usr/local目录下

[root@dxm28 nexus]# cp latest-unix.tar.gz /usr/local/

解压

[root@dxm28 nexus]# cd /usr/local/
[root@dxm28 local]# tar -zxvf latest-unix.tar.gz

创建用户

# 创建nexus用户
[root@dxm28 ~]# useradd nexus

修改属组和属主

[root@dxm28 local]# chown -R nexus.nexus nexus-3.28.1-01 sonatype-work
[root@dxm28 local]# ll -h

在这里插入图片描述

配置环境变量

[root@dxm28 ~]# vim /etc/profile

增加以下内容:

export NEXUS_HOME=/usr/local/nexus-3.28.1-01
export PATH=$PATH:$NEXUS_HOME/bin

使得配置生效:

[root@dxm28 ~]# source /etc/profile

启动

[root@dxm28 ~]# nexus start

在这里插入图片描述

[root@dxm28 ~]# nexus start
WARNING: ************************************************************
WARNING: Detected execution as "root" user.  This is NOT recommended!
WARNING: ************************************************************
Starting nexus

启动失败,原因是不建议使用root用户执行此命令。
解决办法1:创建新的用户来执行此命令。(上面已经创建好了)

解决办法2:修改启动脚本中run_as_root=true的true改为false。在这里插入图片描述
如图,将true改为false即可。
使用**./nexus start这种后台启动方式看不到实时日志**;用**./nexus run是实时启动可以看到日志,但是此启动方式不能退出回命令模式**。
./nexus status #查看启动状态,./nexus stop #停止,./nexus restart重启

# 前台启动:
nexus console

# 以后台进程启动:
 nexus start

查看输出的日志:tail -f logs/wrapper.log。
我们切换用户nexus,再启动使用nexus run,看是否有错误

[root@dxm28 local]# su nexus
[nexus@dxm28 local]$ nexus run

在这里插入图片描述
在这里插入图片描述
看到Started Sonatype Nexus OSS 3.28.1-01说明已经启动成功。
Ctrl+C停止这个进程,然后我们再使用nexus start命令启动。在这里插入图片描述
查看一下进程:

[nexus@dxm28 local]$ ps aux | grep java | grep nexus

在这里插入图片描述
启动成功。再看一下端口监听情况:

[nexus@dxm28 local]$ netstat -ntlp | grep 8081

在这里插入图片描述
查看状态:

[nexus@dxm28 local]$ nexus status

在这里插入图片描述

验证

浏览器访问http://IP+端口,我们这里是http://192.168.0.28:8081,出现如下界面即可。
在这里插入图片描述
点击sign in,看到弹出框有如下提示信息:Your admin user password is located in
/usr/local/sonatype-work/nexus3/admin.password on the server.,我们可以在服务器执行一下查看密码的命令

[nexus@dxm28 local]$ cat /usr/local/sonatype-work/nexus3/admin.password

在这里插入图片描述
这个就是我们的密码。admin就是我们的用户名,我们输入账号密码登录试试。在这里插入图片描述
登录成功之后,我们重置一下密码。

Repositories介绍

在这里插入图片描述
仓库分类前面我们已经介绍过了,所以这里不难看出:
maven-central:maven中央库,默认从https://repo1.maven.org/maven2/拉取jar
maven-releases:私库发行版jar,公司或团队内部的包,正式版。
maven-snapshots:私库快照(调试版本)jar,公司或团队内部的包,开发测试版。
maven-public:仓库分组,把上面三个仓库组合在一起对外提供服务,在本地maven基础配置settings.xml中使用。它的目的就是把多个仓库组合起来,然后我们项目中只需要配置上这个类型的仓库地址,就可以把它里面组合的几个仓库都关联上。

私服配置

下面的配置都是在maven配置文件下面settings.xml 里面进行的配置。

指定本地仓库
<!--存放本地仓库的地方-->  
<localRepository>/data/maven/repository</localRepository>  
配置私服镜像地址

在settings.xml 文件的 mirrors 内添加以下镜像地址:

<mirror>
    <id>nexus</id>
    <mirrorOf>*</mirrorOf>
    <url>http://localhost:8081/repository/maven-public/</url>
</mirror>
配置阿里镜像地址

在settings.xml 文件的 mirrors 内添加以下镜像地址:

<mirror>
   <id>alimaven</id>
   <name>aliyun maven</name>
   <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
   <mirrorOf>central</mirrorOf>
</mirror>
配置认证信息

Nexus的仓库对于匿名用户是只读的,为了能够部署构件,还需要在setting.xml中的servers配置认证信息。

<server>
    <id>nexus_release</id>
    <username>admin</username>
    <password>admin123</password>
    <filePermissions>664</filePermissions>
    <directoryPermissions>775</directoryPermissions>
    <configuration></configuration>
</server>

<server>
    <id>nexus_snapshots</id>
    <username>admin</username>
    <password>admin123</password>
    <filePermissions>664</filePermissions>
    <directoryPermissions>775</directoryPermissions>
    <configuration></configuration>
</server>

<server>
  <id>central-proxy</id>
  <username>admin</username>
  <password>admin123</password>
  <filePermissions>664</filePermissions>
  <directoryPermissions>775</directoryPermissions>
  <configuration></configuration>
</server>
配置profile

在profiles内添加以下Profile 配置:

<profile>
  <id>nexus</id><!--和activeProfile 值一致 -->
  <activation>
      <activeByDefault>true</activeByDefault>
  </activation>
  <repositories>
    <repository>
      <id>central</id>
      <url>http://localhost:8081/repository/maven-central/</url>
      <releases>
         <enabled>true</enabled>
         <updatePolicy>never</updatePolicy>
         <checksumPolicy>warn</checksumPolicy>
      </releases>
      <snapshots>
      <!--true或者false表示该仓库是否为下载某种类型构件(发布版,快照版)开启。 -->
          <enabled>true</enabled>
          <!--该元素指定更新发生的频率。Maven会比较本地POM和远程POM的时间戳。这里的选项是:always(一直),daily(默认,每日),interval:X(这里X是以分钟为单位的时间间隔),或者never(从不)。 -->
          <updatePolicy>never</updatePolicy>
          <!--当Maven验证构件校验文件失败时该怎么做-ignore(忽略),fail(失败),或者warn(警告)。 -->
         <checksumPolicy>warn</checksumPolicy>
      </snapshots>
      <!--用于定位和排序构件的仓库布局类型-可以是default(默认)或者legacy(遗留)。Maven 2为其仓库提供了一个默认的布局;然而,Maven 1.x有一种不同的布局。我们可以使用该元素指定布局是default(默认)还是legacy(遗留)。 -->
      <layout>default</layout>
    </repository>
  </repositories>
  <pluginRepositories>
    <pluginRepository>
      <id>central</id>
      <url>http://localhost:8081/repository/maven-central/</url>
      <releases><enabled>true</enabled></releases>
      <snapshots><enabled>true</enabled></snapshots>
    </pluginRepository>
  </pluginRepositories>
</profile>
配置activeProfile

在activeProfiles内添加以下activeProfile配置:

<!--激活上面配置的仓库信息-->  
<activeProfiles>
  <activeProfile>nexus</activeProfile>
</activeProfiles>
添加阿里云仓库

添加阿里云仓库就是为了在私服找不到依赖包时能去阿里云找,找到后返回给依赖方并缓存到私服。
在这里插入图片描述
我们先Create repository。
在这里插入图片描述
选择maven2 proxy在这里插入图片描述
我们只要改图中两个地方即可,一个是资源名字,一个是远程仓库地址,这里我们输入http://maven.aliyun.com/nexus/content/groups/public/作为yu远程仓库地址。然后点击Create repository。在这里插入图片描述
接下来我们把这个仓库加入到maven-pubilc中,也就是我们配置的私服仓库地址。
在这里插入图片描述
然后我们给它移到右边Members中并且排在第一位。在这里插入图片描述
点击保存。这样就配置好了,如果资源在私服找不到就会到阿里云找。

在项目中的使用

获取依赖包

如果是普通项目成员,不需要向私服发布包的,只需要在 pom 文件中加入以下配置即可。

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

其中 id 要和你的仓库名称一致,url 就是私服的仓库地址,就是type为group的那个,它组合了一个 proxy 类型的和两个 hosted 类型的仓库。设置snapshots的enabled为ture表示允许下载 snapshots版本的包。

发布包

如果需要向仓库中发布包的,首先需要对仓库有权限才可以,没有权限的用户是没办法发布的。其实就是我们在上面配置认证信息的部分内容,此处不再赘述。然后需要在pom.xml 中的 project 内添加自动部署构件配置,配置下面的内容

<distributionManagement><!-- 远程部署管理信息 --> 
<!-- 项目部署到私服配置 id和上面server中配置的id一致-->  
        <repository><!--部署项目产生的构件到远程仓库需要的信息 -->
            <id>nexus_release</id>
            <name>maven-releases</name>
            <url>http://localhost:8081/repository/maven-releases/</url>
        </repository>
        <snapshotRepository><!-- 如果没有配置该元素,默认部署到repository元素配置的仓库 -->
            <id>nexus_snapshots</id>
            <name>maven-snapshots</name>
            <url>http://localhost:8081/repository/maven-snapshots/</url>
        </snapshotRepository>
</distributionManagement>

我们看到上面配置了一个repository,还有一个snapshotRepository,上面表示的是releases版。注意id要和setting.xml里server下的id一致,不然会出现权限问题。url分别指定maven-releases和maven-snapshots的地址。

只要在项目中配置1.0-SNAPSHOT这样,带有SNAPSHOT的就会到snapshots仓库,如果不加 SNAPSHOT就会到releases仓库。

最后执行 mvn clean deploy 命令,即可发布包到私服仓库中
各参数代表含义为:

参数含义
-Dmaven.test.skip=true跳过编译、测试
-Dfilejar包文件地址,绝对路径
-DgroupIdgroupId,可自定义
-DartifactIdartifactId,可自定义
-Dversion版本号
-Dpackaging打包方式
-DrepositoryId远程库服务器ID
-Durl远程库服务器地址

例如我们将admin-server-0.0.1-SNAPSHOT.jar发布到私服上,命令如下:mvn clean deploy -DgroupId=com.bat -DartifactId=admin-server -Dversion=0.0.1-SNAPSHOT -Dpackaging=jar -Dfile=/data/workspace/jar/admin-server/admin-server-0.0.1-SNAPSHOT.jar -Durl=http://192.168.0.28:8081/repository/maven-snapshots/ -DrepositoryId=nexus_snapshots --settings /usr/local/maven/conf/settings.xml

[root@dxm28 admin-server]# mvn clean deploy -DgroupId=com.bat -DartifactId=admin-server -Dversion=0.0.1-SNAPSHOT -Dpackaging=jar -Dfile=/data/workspace/jar/admin-server/admin-server-0.0.1-SNAPSHOT.jar -Durl=http://192.168.0.28:8081/repository/maven-snapshots/ -DrepositoryId=nexus_snapshots --settings /usr/local/maven/conf/settings.xml

在这里插入图片描述
在这里插入图片描述
显示成功,我们接下来到私服服务器看一下。在这里插入图片描述
在这里插入图片描述
可以看到我们的jar包已经成功发布到私服上了。在这里插入图片描述
点击左边的jar文件可以在右边看到相应的依赖配置,可以直接添加到pom.xml文件中下载相应的依赖。

除了以上命令方式发布包之外,也可以在IDEA中打开maven菜单,双击deploy按钮发布包到私服仓库中。

至此我们就完成了私服的搭建以及发布包到私服的过程。

加入systemctl管理并设置开机自启动

将nexus加入systemctl管理

创建nexus.service服务文件

创建nexus.service服务文件

[root@dxm28 /]# vim /etc/systemd/system/nexus.service

内容如下:

[Unit]
Description=nexus service
After=network.target

[Service]
User=nexus
Group=nexus
Type=forking
ExecStart=/usr/local/nexus-3.28.1-01/bin/nexus start
ExecStop=/usr/local/nexus-3.28.1-01/bin/nexus stop
Restart=on-abort

[Install]
WantedBy=multi-user.target

重新加载服务列表

[root@dxm28 /]# systemctl daemon-reload

启动服务

# 停止上面手动后台启动的nexus服务
[root@dxm28 /]# ps aux | grep java | grep nexus
nexus      62192  1.2 42.8 6734716 1646016 pts/0 Sl   10:22   2:33 /usr/local/jdk/bin/java -server -Dinstall4j.jvmDir=/usr/local/jdk -Dexe4j.moduleName=/usr/local/nexus-3.28.1-01/bin/nexus -XX:+UnlockDiagnosticVMOptions -Dinstall4j.launcherId=245 -Dinstall4j.swt=false -Di4jv=0 -Di4jv=0 -Di4jv=0 -Di4jv=0 -Di4jv=0 -Xms2703m -Xmx2703m -XX:MaxDirectMemorySize=2703m -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=../sonatype-work/nexus3/log/jvm.log -XX:-OmitStackTraceInFastThrow -Djava.net.preferIPv4Stack=true -Dkaraf.home=. -Dkaraf.base=. -Dkaraf.etc=etc/karaf -Djava.util.logging.config.file=etc/karaf/java.util.logging.properties -Dkaraf.data=../sonatype-work/nexus3 -Dkaraf.log=../sonatype-work/nexus3/log -Djava.io.tmpdir=../sonatype-work/nexus3/tmp -Dkaraf.startLocalConsole=false -Djava.endorsed.dirs=lib/endorsed -Di4j.vpt=true -classpath /usr/local/nexus-3.28.1-01/.install4j/i4jruntime.jar:/usr/local/nexus-3.28.1-01/lib/boot/nexus-main.jar:/usr/local/nexus-3.28.1-01/lib/boot/activation-1.1.1.jar:/usr/local/nexus-3.28.1-01/lib/boot/jakarta.xml.bind-api-2.3.3.jar:/usr/local/nexus-3.28.1-01/lib/boot/jaxb-runtime-2.3.3.jar:/usr/local/nexus-3.28.1-01/lib/boot/txw2-2.3.3.jar:/usr/local/nexus-3.28.1-01/lib/boot/istack-commons-runtime-3.0.10.jar:/usr/local/nexus-3.28.1-01/lib/boot/org.apache.karaf.main-4.2.9.jar:/usr/local/nexus-3.28.1-01/lib/boot/osgi.core-6.0.0.jar:/usr/local/nexus-3.28.1-01/lib/boot/org.apache.karaf.specs.activator-4.2.9.jar:/usr/local/nexus-3.28.1-01/lib/boot/org.apache.karaf.diagnostic.boot-4.2.9.jar:/usr/local/nexus-3.28.1-01/lib/boot/org.apache.karaf.jaas.boot-4.2.9.jar com.install4j.runtime.launcher.UnixLauncher start 9d17dc87 0 0 org.sonatype.nexus.karaf.NexusMain

[root@dxm28 /]# kill -9 62192

# 检查是否还存在nexus进程
[root@dxm28 /]# ps aux | grep java | grep nexus

# 查询所有服务单元是否有nexus
[root@dxm28 /]# systemctl list-unit-files | grep nexus
nexus.service                              disabled

# 存在,且非开启自启动,使用systemctl启动nexus服务
[root@dxm28 /]# systemctl start nexus.service

# 查看nexus服务状态
[root@dxm28 /]# systemctl status nexus.service

在这里插入图片描述
Active: active (running) 可以看到nexus服务已经启动成功。查看进程以及端口的监听情况:

[root@dxm28 /]# ps aux | grep java | grep nexus

[root@dxm28 /]# netstat -ntlp | grep 8081

在这里插入图片描述
浏览器访问http://192.168.0.28:8081/
在这里插入图片描述

将nexus设置为开机自启动

[root@dxm28 /]# systemctl list-unit-files | grep nexus
nexus.service                              disabled
# disabled表示非开机自启动

# 设置为开机自启动
[root@dxm28 /]# systemctl enable nexus.service
Created symlink /etc/systemd/system/multi-user.target.wants/nexus.service → /etc/systemd/system/nexus.service.

# 再次查看
[root@dxm28 /]# systemctl list-unit-files | grep nexus
nexus.service                              enabled

# enabled表示是开机自启动,执行重启命令
[root@dxm28 /]# reboot

#重启后再次查看nexus服务已启动完成。
  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值