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 条评论
登录 后参与评论

相关文章

来自专栏运维经验分享

sublime 列选择 原

2016年11月17日 09:27:24 zzh_my 阅读数:20295 标签: sublime text 更多

31340
来自专栏数据和云

Oracle 19c 新特性:ANY_VALUE 函数和 LISTAGG 的增强

注:Oracle 的 LiveSQL 站点已经升级到 19c 版本,可以通过该网站来测试 19c 的新特性。

13240
来自专栏acoolgiser_zhuanlan

MFC编程时出现错误: "char *" 类型的实参与 "LPCTSTR" 类型的形参不兼容 解决办法

MFC编程时出现错误:  "char *" 类型的实参与 "LPCTSTR" 类型的形参不兼容  的原因是因为编辑器默认编码是Unicode字符集,因此只需要在...

23020
来自专栏SpringBoot 核心技术

micro-job分布式任务调度框架更新

micro-job是一款分布式任务调度执行框架,内部通过各个组件的Jersey共享出的Rest路径进行数据访问。

17520
来自专栏程序员互动联盟

哪种IDE能同时写java和前端代码?

从事编程多年,主要在嵌入式领域以及浏览器领域演技的时间比较长,最近几年因为业务需要切换到后端开发,其实使用哪种IDE或者编辑器和个人的习惯有着密切的关系,如同很...

30640
来自专栏Linyb极客之路

Java Web安全之代码审计

信息安全的75%发生在Web应用而非网络层。本文内容主要以Java Web安全-代码审计为中心展开。

37330
来自专栏简书专栏

基于python+PyQt5的Google身份验证器

1.本文学习nanhuier的博客《Python计算谷歌身份验证器的验证码》并优化其中代码。 原博客链接:https://blog.csdn.net/nanh...

19120
来自专栏生信小驿站

Anaconda介绍与Ubuntu/windows安装Anaconda

大多数 Python 的初学者们都曾为配置环境问题或者选择便利的编辑器等问题头疼,所以这里推荐使用 Anaconda 来管理你的安装环境和各种工具包。

24120
来自专栏Java架构师历程

idea 项目名称红色 解决办法

idea如果当前project用了版本控制器,其下面新建的所有的项目默认都是加入到版本控制里面,所以项目名称和文件都是红色的;

15030
来自专栏芋道源码1024

Spring Boot 集成 Lombok 让代码更简洁

1.菜单栏 File > Settings > Plugins > Browse repositories…

15320

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励