Maven and Nexus2

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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的仓库分为本地仓库和远程仓库。

20180928153813408874285.png

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

20180928153813411863911.png

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

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

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

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

20180928153813437032303.png

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: ucloudgather_facts: Falseroles:- 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界面

20181009153910077425615.png

使用管理员用户登录,账号: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

20181010153910124649981.png

Nexus管理

Nexus仓库类型
  • hosted 宿主仓库:主要用于部署无法从公共仓库获取的构件(如 oracle 的 JDBC 驱动)以及自己或第三方的项目构件;
  • proxy 代理仓库:代理公共的远程仓库;
  • virtual 虚拟仓库:用于适配 Maven 1;
  • group 仓库组:Nexus 通过仓库组的概念统一管理多个仓库,这样我们在项目中直接请求仓库组即可请求到仓库组管理的多个仓库。

20181009153909089499206.png

仓库常见操作
  • 修改默认存储路径
  • 同步索引
  • 修改远程同步地址为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: 2018101015391861131094.png

  • 在项目中调用(pom.xml):http://maven.apache.org/guides/mini/guide-mirror-settings.html

参考资料

https://www.sonatype.com/

https://help.sonatype.com/repomanager2

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

转载于:https://my.oschina.net/adailinux/blog/2247017

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253296.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux kernel的中断子系统之(九):tasklet

返回目录&#xff1a;《ARM-Linux中断系统》。 总结&#xff1a; 二介绍了tasklet存在的意义。 三介绍了通过tasklet_struct来抽想一个tasklet&#xff0c;每个CPU维护一个tasklet链表tasklet_vec/tasklet_hi_vec&#xff0c;然后介绍了如何定一个一个tasklet(静态/动态)&#…

智能音箱 之 功放介绍

基本分类 功率放大器分甲类功放&#xff08;A 类&#xff09;&#xff0c;乙类&#xff08;B 类&#xff09;&#xff0c;甲乙类&#xff08;AB 类&#xff09;和丁类&#xff08;D 类&#xff09;&#xff1b; A 类 指在信号的整个周期内&#xff0c;放大器的任何功率输出…

create_workqueue和create_singlethread_workqueue【转】

本文转载自&#xff1a;http://bgutech.blog.163.com/blog/static/18261124320116181119889/ 1. 什么是workqueueLinux中的Workqueue机制就是为了简化内核线程的创建。通过调用workqueue的接口就能创建内核线程。并且可以根据当前系统CPU的个数创建线程的数量&#xff0c;使得线…

vue学习之路.02

2019独角兽企业重金招聘Python工程师标准>>> 第一个vue项目 1.创建 vue init webpack app01 2.安装依赖 cd app01 npm install 3.构建 npm run dev 启动本机的8080端口 或 …

解析电子墨水屏技术(工作原理与LCD的区别)

阅读电子书早已成为大家生活中一部分&#xff0c;方便轻巧的电子版书籍更便于携带&#xff0c;而电子阅读器也不仅仅局限于电脑、手机等传统设备&#xff0c;新兴的电子书阅读器渐渐为我们所接受。E-ink电子墨水技术就是现在最著名的产品之一&#xff0c;他的出现让电子书阅读器…

入门视频采集与处理(BT656简介) 转

凡是做模拟信号采集的&#xff0c;很少不涉及BT.656标准的&#xff0c;因为常见的模拟视频信号采集芯片都支持输出BT.656的数字信号&#xff0c;那么&#xff0c;BT.656到底是何种格式呢&#xff1f;本文将主要介绍 标准的 8bit BT656&#xff08;4:2:2&#xff09;YCbCr SDTV&…

眼图(Eye Diagram)与数字信号测试

问题: 什么是眼图&#xff1f;它用在什么场合&#xff1f;反映了波形的什么信息&#xff1f;NI相应的解决方案是怎样的&#xff1f; 解答: 眼图&#xff08;Eye Diagram&#xff09;可以显示出数字信号的传输质量&#xff0c;经常用于需要对电子设备、芯片中串行数字信号或者…

2018年智能音箱对比

众所周知&#xff0c;2014年底&#xff0c;电商巨头亚马逊推出智能音箱产品Echo之后&#xff0c;引起市场的强烈反响。随后、谷歌、微软、苹果均开始布局智能音箱市场&#xff0c;国内公司以玲珑科技打头阵。2017年国内公司纷纷发布智能音箱&#xff0c;被称为智能音箱元年。经…

LVDS通信接口详细介绍

1. 概述 LVDS Low-Voltage Differential Signaling 低电压差分信号&#xff0c;属于平衡传输信号。 这种技术的核心是采用极低的电压摆幅高速差动传输数据&#xff0c;从而有以下特点&#xff1a; 低功耗---低误码率---低串扰---低抖动---低辐射 良好的信号完整性。 推…

ThinkPHP简单的验证码实现

ThinkPHP简单的验证码实现 写一个最简单的TP验证码。 写Controller 首先在Controller/IndexController.class.php&#xff08;简称Index&#xff09;文件中编辑&#xff1a; 1 <?php 2 namespace Home\Controller; 3 use Think\Controller; 4 use Think\Verify;//这个类…

Celery框架简单实例

Python 中可以使用Celery框架 Celery框架是提供异步任务处理的框架&#xff0c;有两种用法&#xff0c;一种&#xff1a;应用程式发布任务消息&#xff0c;后台Worker监听执行&#xff0c;好处在于不影响应用程序继续执行。第二种&#xff0c;设置定时执行&#xff08;这边没测…

沸腾新十年 | 中国语音产业江湖和科大讯飞的前半生

沸腾新十年 | 中国语音产业江湖和科大讯飞的前半生 2019-01-09 来源:左林右狸 写在前面&#xff1a; 这是《沸腾新十年》的第十一篇剧透文&#xff0c;也是2019年的第一篇剧透文&#xff0c;从确认选题到采编到反复修改&#xff0c;这篇稿子操作时间前后历经近半年。究其原…

[oracle]分区表学习

&#xff08;一&#xff09;什么是分区 所谓分区&#xff0c;就是将一张巨型表或巨型索引分成若干个独立的组成部分进行存储和管理&#xff0c;每一个相对小的&#xff0c;可独立管理的部分&#xff0c;称为分区。 &#xff08;二&#xff09;分区的优势 提高数据可管理性。对表…

Matcher类的简单使用

今天工作时遇到一个问题&#xff0c; 用正则处理html标签时不知该如何下手。还好有Matcher帮助解决了问题。需求如下&#xff1a;例如有如下html文章内容&#xff1a;<p><a href"www.baidu.com">百度的链接</a>; 这是一个百度的链接。 <a href&…

USB 摄像头成熟方案介绍

UVC&#xff0c;全称为&#xff1a;USB video class 或USB video device class。是Microsoft与另外几家设备厂商联合推出的为USB视频捕获设备定义 的协议标准&#xff0c;目前已成为USB org标准之一。 如今的主流操作系统(如Windows XP SP2 and later, Linux 2.4.6 and later…

JS练习:商品的左右选择

代码&#xff1a; <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>商品的左右选择</title><!--步骤分析1. 确定事件: 点击事件 :onclick事件2. 事件要触发函数 selectOne3. selectOne要做一些操作(将左边选中的元…

Python 购物车

购物车需求&#xff1a; 可购买的商品信息显示 显示购物车内的商品信息、数量 购物车内的商品数量进行增加、减少 用户余额的充值 用户购买完成进行结账&#xff0c;将最终余额回写到用户文件中   流程图&#xff1a; 代码&#xff1a; 1、主文件 def login():# 验证用户帐号…

认对画对MOS管

MOS管我们在设计电路中经常用的一种无源器件。 首先介绍下&#xff0c;在原理图和PCB以及实物PCBA中如何辨别各种MOS管&#xff0c;作为应用好的先决条件&#xff0c;必须认对画对管子。 1. MOS管的GSD三极在原理图和PCB上怎么判定&#xff1a; G极(gate)—栅极&#xff0c;原…