专栏首页阿dai_linuxMaven and Nexus2 原

Maven and Nexus2 原

Maven and Nexus2

Maven是什么?

  • 构建工具: 通过简单的命令,能够完成清理、编译、测试、打包、部署等一系列过程。同时,不得不提的是,Maven是跨平台的,无论是在Windows、还是在Linux或Mac上,都可以使用同样的命令。
  • 依赖管理工具: 项目依赖的第三方的开源类库,都可以通过依赖的方式引入到项目中来。代替了原来需要首先下载第三方jar,再加入到项目中的方式。从而更好的解决了合作开发中依赖增多、版本不一致、版本冲突、依赖臃肿等问题。
  • 项目信息管理工具: 能够管理项目描述、开发者列表、版本控制系统地址、许可证等一些比较零散的项目信息。除了直接的项目信息,通过Maven自动生成的站点,以及一些已有的插件,还能够轻松获得项目文档、测试报告、静态分析报告、源码版本、日志报告等非常具有价值的项目信息。

Maven V·S Nexus

这个问题从Maven的第二个用处说起,依赖管理,通过在Pom中指定坐标的形式将jar引入到项目中。那这个过程,要经历怎样一个流程呢?从哪里寻找jar?下载的jar放到哪里?

将这个问题顺下来,就知道nexus和maven的关系了。

从哪里找到jar?项目用到的jar又存放在哪里?这引出了仓库的概念,maven通过仓库来统一管理各种构件。Maven的仓库分为本地仓库和远程仓库。

当Maven根据坐标寻找构件时,它首先会查看本地仓库,如果本地仓库存在此构件,则直接使用;如果本地仓库不存在此构件,或者需要查看是否有更新的构件版本,Maven会去远程仓库查找,发现需要的构件之后,下载到本地仓库再使用。

到了这里,问题的答案也就出来了。

首先,Nexus是一种远程仓库,根据上段的介绍,我们已经知道远程仓库的作用。在远程仓库中,默认的是中央仓库,中央仓库是Maven核心自带的远程仓库。那就使用中央仓库不就得了吗,为什么我们要安装Nexus呢?

我们从项目实际开发来看:

  1. 如果没有私服,我们所需的所有构件都需要通过maven的中央仓库和第三方的Maven仓库下载到本地,而一个团队中的所有人都重复的从maven仓库下载构件无疑加大了仓库的负载和浪费了外网带宽,如果网速慢的话,还会影响项目的进程。
  2. 很多情况下项目的开发都是在内网进行的,连接不到maven仓库怎么办呢?开发的公共构件怎么让其它项目使用?这个时候我们不得不为自己的团队搭建属于自己的maven私服,这样既节省了网络带宽也会加速项目搭建的进程,当然前提条件就是你的私服中拥有项目所需的所有构件。
  3. 为了节省带宽和时间,在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库。当本地Maven项目需要下载构件时,先去私服请求,如果私服没有,则再去远程仓库请求,从远程仓库下载构件后,把构件缓存在私服上。这样,及时暂时没有Internet链接,由于私服已经缓存了大量构件,整个项目还是可以正常使用的。同时,也降低了中央仓库的负荷。

Nexus仅仅是私服的一种。

通过上面说明如果还不能理解maven和nexus是什么,可以对比一下yum仓库以及本地yum源,maven只不过是将/etc/yum.repos.d/*.repo源换做项目中的pom.xml调用的jar源。

安装及配置

安装Maven

在centos7系统安装maven很简单,直接使用yum安装就可以,不过在安装maven之前首先要配置系统的 JDK (java)环境。春雨使用ansible进行部署,对应的role是 maven

playbook:

$ cat maven.yml
---
- hosts: ucloud
  gather_facts: False
  roles:
    - role: maven

使用方法:

$ ansible-playbook maven.yml 

安装Nexus

官方建议 服务器硬件配置:

  • CPU:≥4核
  • memory:≥4G (do not set max heap size larger than 4GB
  • fd:65536

安装依赖

  • Java 8
  • maven
  • npm

Java和maven在上面的过程已安装,接下来只需要安装npm,步骤如下:

# 安装之前先创建对应的目录
$ mkdir /home/node
$ cd /home/node

# 使用nodejs管理npm
$ wget https://nodejs.org/dist/v8.12.0/node-v8.12.0-linux-x64.tar.xz

# 解压
$ tar Jxvf node-v8.12.0-linux-x64.tar.xz
$ mv node-v8.12.0-linux-x64 nodejs

# 加入系统环境
$ ln -s /home/node/nodejs/bin/node /usr/bin/node
$ ln -s /home/node/nodejs/bin/npm /usr/bin/npm

# 升级npm
$ npm install npm@latest -g

安装Nexus2

$ cd /usr/local/
$ wget https://download.sonatype.com/nexus/oss/nexus-2.13.0-01-bundle.tar.gz
$ tar xvzf nexus-2.13.0-01-bundle.tar.gz
$ ln -s nexus-2.13.0-01 nexus
## nexus-2.13.0-01:应用目录
## sonatype-work:数据目录,存放所有的repo

# 启动
$ cd /usr/local/nexus/bin/
$ ./nexus start
****************************************
WARNING - NOT RECOMMENDED TO RUN AS ROOT
****************************************
If you insist running as root, then set the environment variable RUN_AS_USER=root before running this script.

$ vim /usr/local/nexus/bin/nexus
RUN_AS_USER=root

$  ./nexus start 
****************************************
WARNING - NOT RECOMMENDED TO RUN AS ROOT
****************************************
Starting Nexus OSS...
Started Nexus OSS.

$ tail -f /usr/local/nexus/logs/wrapper.log

启动成功后在浏览器访问(localhost:8081/nexus/):http://192.168.228.130:8081/nexus/ ,进入web界面

使用管理员用户登录,账号:admin 密码:admin123。如果使用sonatype管理用户和密码,可以通过设置——change password来更改密码,如果集成了ldap用户,则无法通过此方法更改密码。

  • 系统优化: sonatype需要配置系统文件描述符数量为 65536,配置方法如下: # 查看当前系统可打开文件描述符数量 $ ulimit -n # 修改文件描述符数量 ## 临时修改 $ ulimit -n 65535 ## 永久修改 $ vim /etc/security/limits.conf nexus - nofile 65536 如果 加入了systemd管理 nexus,上述方法是不生效的,配置方法如下: # 加入systemd管理 $ vim /usr/lib/systemd/system/nexus.service [Unit] Description=nexus service After=network.target [Service] Type=forking LimitNOFILE=65536 ExecStart=/usr/local/nexus/bin/nexus start ExecStop=/usr/local/nexus/bin/nexus stop Restart=on-abort [Install] WantedBy=multi-user.target 管理nexus服务: $ systemctl daemon-reload $ systemctl start nexus

集成ldap

Nexus管理

Nexus仓库类型
  • hosted 宿主仓库:主要用于部署无法从公共仓库获取的构件(如 oracle 的 JDBC 驱动)以及自己或第三方的项目构件;
  • proxy 代理仓库:代理公共的远程仓库;
  • virtual 虚拟仓库:用于适配 Maven 1;
  • group 仓库组:Nexus 通过仓库组的概念统一管理多个仓库,这样我们在项目中直接请求仓库组即可请求到仓库组管理的多个仓库。
仓库常见操作
  • 修改默认存储路径
  • 同步索引
  • 修改远程同步地址为aliyun镜像地址

代理maven-proxy

  • 更改maven配置 编辑maven的settings.xml文件,更改mirror、profile、activeProfiles模块的内容如下: $ vim /etc/maven/settings.xml <settings> <mirrors> <mirror> <!--This sends everything else to /public --> <id>nexus</id> <mirrorOf>*</mirrorOf> <url>http://localhost:8081/repository/maven-proxy/</url> </mirror> </mirrors> <profiles> <profile> <id>nexus</id> <!--Enable snapshots for the built in central repo to direct --> <!--all requests to nexus via the mirror --> <repositories> <repository> <id>central</id> <url>http://central</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>central</id> <url>http://central</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> <activeProfiles> <!--make the profile active all the time --> <activeProfile>nexus</activeProfile> </activeProfiles> </settings>
  • 进入web,配置nexus:

参考资料

https://www.sonatype.com/

https://help.sonatype.com/repomanager2

http://www.mdslq.cn/archives/d406f18d.html

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • sed工具(一) 原

    语法: sed [options] 'command' filename sed [options] -f scriptfile filename

    阿dai学长
  • mysql一主多从同步配置 转

    完成配置后重启mysql服务。 修改slave2上的配置文件my.cnf,和上面类似,只是把server-id改下,为了方便,我都用了相应的ip某位,so,s...

    阿dai学长
  • MySQL主从配置——双主 原

    本人是测试环境,准备了两台安装好mysql的服务器(masterA和masterB),可以保证没数据写入,否则需要先将两台服务器上的数据一致,然后再进行主从配置...

    阿dai学长
  • Nexus3 OSS环境搭建以及在日常工作中的用途

    本文介绍的Nexus不是谷歌的一个手机品牌哈,而是一个非常强大的仓库管理平台。支持常见的Docker、Maven、npm、PyPI等仓库的管理。

    小博测试成长之路
  • Kubernetes策略即代码是什么?

    客座文章最初由 Kendall Miller 在Fairwinds 博客[1]上发表

    CNCF
  • AAAI 2020 | 中山大学HCP实验室:基于树状结构策略的渐进强化学习,代码已开源!

    本文对中山大学、北京航空航天大学、DMAI合作完成,被AAAI2020录用的一篇关于多模态视频理解的论文《Tree-Structured Policy base...

    AI科技评论
  • Prometheus 入门与实践

    随着容器技术的迅速发展,Kubernetes 已然成为大家追捧的容器集群管理系统。Prometheus 作为生态圈 Cloud Native Computing...

    菲宇
  • 转换Cifar10数据集

    Cifar10数据集不讲了吧,入门必备,下载地址: https://www.cs.toronto.edu/~kriz/cifar.html 官方提供三种形式...

    GavinZhou
  • 适合开发者的深度学习:第一天就能使用的编码神经网络工具

    当前的深度学习浪潮在五年前就开始了。深度学习是驱动汽车的技术,也可以在Atari游戏中击败人类,甚至能够诊断癌症。 深度学习是机器学习的一个分支。它被证明是一种...

    AiTechYun
  • (0)James Stewart Calculus 5th Edition:自己扯淡

    自己也没有怎么看完过什么全英文的书籍 原来同事,感觉英文也一般,但是为了图形学的代码 看完整本书,并且做完了所有的题目

    dodo_lihao

扫码关注云+社区

领取腾讯云代金券