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(静态/动态)&#…

市面主要远场语音交互技术架构

为什么Google Home要采用双麦方案&#xff0c;而且大部分智能音箱才用环形六麦&#xff1f;事实上&#xff0c;这是由各家不同的技术架构决定的&#xff0c;当前市面上主要存在三种远场语音交互技术架构。 1、以Google为代表的纯云端技术架构 首先就是以Google为代表的纯云端技…

iOSPush自动隐藏tabbar

只需要在UITabBarController添加控制器的时候调用YZNav初始化&#xff0c;就可以实现tabbar的自动隐藏了。 直接上github地址&#xff1a;https://github.com/YouZhiZheShiJingCheng/YZNav 转载于:https://www.cnblogs.com/BK-12345/p/6472815.html

中国智能高清视频监控未来发展趋势

浏览数: 1228 海康威视&#xff1a;田振华 《中国公共安全》&#xff1a;您认为高清摄像机将朝着哪个方向发展&#xff1f;像素会达到什么标准&#xff1f; 高清摄像机发展趋势&#xff1a; 一&#xff1a;高清 虽然说现在已经实现高清&#xff0c;但是从显示效果来看现有的高…

智能音箱 之 功放介绍

基本分类 功率放大器分甲类功放&#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;使得线…

平安城市与智慧城市对接的关键要素

平安城市经过前两个阶段&#xff08;布点、联网&#xff09;的大规模建设之后&#xff0c;如今正向系统应用深化&#xff0c;数据深入挖掘利用的方向发展。以视频监控为基础单元&#xff0c;一些城市开始尝试在既有的社会治安管理平台系统基础上拓展更多的应用功能&#xff0c;…

vue学习之路.02

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

等价表达式

小目标的最后一步。 原题链接&#xff1a;https://www.luogu.org/problem/show?pid1054 精力不足&#xff0c;代码工作可能要放在后几天。。。 思路已经明确了&#xff0c;我说一下。 这道题的大意是给出若干表达式&#xff0c;问这些表达式的值和初始表达式的值是不是相等。 …

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

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

27:级数求和

27:级数求和 查看提交统计提问总时间限制: 1000ms内存限制: 65536kB描述已知&#xff1a;Sn 1&#xff0b;1&#xff0f;2&#xff0b;1&#xff0f;3&#xff0b;…&#xff0b;1&#xff0f;n。显然对于任意一个整数K&#xff0c;当n足够大的时候&#xff0c;Sn大于K。 现给出…

入门视频采集与处理(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;经常用于需要对电子设备、芯片中串行数字信号或者…

BZOJ 1609 [Usaco2008 Feb]Eating Together麻烦的聚餐:LIS LDS (nlogn)

题目链接&#xff1a;http://www.lydsy.com/JudgeOnline/problem.php?id1609 题意&#xff1a; 给你一个只由数字"1,2,3"组成的序列a[i]&#xff0c;共n个数。 你可以任意更改这些数字&#xff0c;使得序列中每一种数字都“站在一起”&#xff0c;并且单调不减或不增…

Oracle 数据库字典 sys.obj$ 表中关于type#的解释

sys.obj$ 表是oracle 数据库字典表中的对象基础表&#xff0c;所有对象都在该表中有记录&#xff0c;其中type#字段表明对象类型&#xff0c;比如有一个表 test &#xff0c;则该对象在sys.obj$ 中存在一条记录&#xff0c;name列为test&#xff0c; type#列为2&#xff0c;表示…

Python高级特性:列表生成式

列表生成式即List Comprehensions&#xff0c;是Python内置的非常简单却强大的可以用来创建list的生成式。 最常见的例子&#xff1a; 生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11))&#xff1a;>>> list(range(1, 11)) [1, 2, 3, 4, 5, 6, 7, 8…

2018年智能音箱对比

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

AMD与CMD区别

AMD&#xff1a;异步模块定义&#xff0c;是一个浏览器端模块化开发的规范&#xff0c;由于不是原生JS支持,使用AMD规范需要用到require.js库require.js注意解决两个问题1、多个js文件可能有依赖关系&#xff0c;被依赖的文件需要早于依赖它的文件加载到浏览器2、js加载的时候浏…

[LeetCode] Interleaving String

1. 是一个很明显的动态规划题。 2. s3中的每个字符不是s1中的就是s2中的&#xff0c;只要根据它之前的状态做转移就可以。 1 class Solution {2 public:3 bool isInterleave(string s1, string s2, string s3) {4 int n s1.size();5 int m s2.size();6 …