当前位置: 首页 > news >正文

使用nexus搭建Maven私服

----------------------------------------------------------------------------------------------
[版权申明:本文系作者原创,转载请注明出处] 
文章出处:http://blog.csdn.net/sdksdk0/article/details/52190619
作者:朱培      ID:sdksdk0      邮箱: zhupei@tianfang1314.cn   
--------------------------------------------------------------------------------------------


一、简单介绍

Maven是一个採用纯Java编写的开源项目管理工具, Maven採用了一种被称之为Project Object Model(POM)概念来管理项目,全部的项目配置信息都被定义在一个叫做POM.xml的文件里, 通过该文件Maven能够管理项目的整个生命周期,包括清除、编译。測试。报告、打包、部署等等。

眼下Apache下绝大多数项目都已经採用Maven进行管理. 而Maven本身还支持多种插件, 能够方便更灵活的控制项目, 开发者的主要任务应该是关注商业逻辑并去实现它, 而不是把时间浪费在学习怎样在不同的环境中去依赖jar,项目部署等


maven和ant都是软件构建工具(软件管理工具),maven比ant更加强大,已经代替了ant,jar包的声明式依赖描写叙述。maven有jar包的仓库。svn是一个软件的版本号控制工具,是一个协同开发工具。svn的仓库存放的是项目的源代码。历史版本号的备份。声明每次版本号的改动情况。


二、私服搭建场景

有些公司都不提供外网给项目组人员,因此就不能使用maven訪问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器。搭建nexus私服,然后开发者连到这台私服上。这种话就能够通过这台搭建了nexus私服的电脑訪问maven的远程仓库。

假设某个IP地址恶意的下载中央仓库内容,比如全公司100台机器使用同一个IP重复下载,这个IP(甚至是IP段)会进入黑名单,因此稍有规模的使用Maven时,应该用Nexus架设私服。


三、nexus部署


下载地址:http://www.sonatype.org/nexus/

第一步:下载nexus-webapp-2.6.2.war包,然后复制到tomcat下的webapps文件夹中

第二步:启动tomcat 默认登录账户密码为: admin  admin123 。点击右上角进行登录。

第三步:訪问http://localhost:8080/项目名称/




四、  repository

Nexus仓库的默认的地址,nexus-2.1.2\WEB-INF\plexus.properties 中定义的

在Views/Repositories-->Repositories里进行配置, nexus里能够配置3种类型的仓库。各自是proxy、hosted、group

proxy:是远程仓库的代理。比方说在nexus中配置了一个central repository的proxy,当用户向这个proxy请求一个artifact,这个proxy就会先在本地查找,假设找不到的话,就会从远程仓库下载。然后返回给用户。相当于起到一个中转的作用

Hosted是宿主仓库。用户能够把自己的一些构件。deploy到hosted中,也能够手工上传构件到hosted里。

比方说oracle的驱动程序,ojdbc6.jar,在central repository是获取不到的,就须要手工上传到hosted里

Group是仓库组。在maven里没有这个概念,是nexus特有的。目的是将上述多个仓库聚合。对用户暴露统一的地址,这样用户就不须要在pom中配置多个地址。仅仅要统一配置group的地址就能够了右边那个Repository Path能够点击进去,看到仓库中artifact列表。只是要注意浏览器缓存。

virtual也是中央仓库镜像,支持M1老版本号



 

hosted :宿主仓库 ,该仓库属于该公司私有的
        1. 3rd part : 第三方的jar包,可是该jar包没有在中心仓库保存,驱动.jar
    2. snapshot :測试版本号、镜像版本号  easyNet.war
    3. release  : 发行版本号
      - proxy  : 代理仓库  :代理中心仓库的jar包
        
      - public :仓库组 :虚拟的概念  能够包括其它的仓库


五、上传jar包到nexus

5.1 直接在nexus管理后台上传

直接选中你想要上传到哪个库中,能够设置组。这里以上传pig的jar为例。选择3rd party,然后填写maven的坐标(groupId+artifactId+version)。



我们能够在浏览器中查看是否已经上传成功。这里能够看到已经有pig这个文件夹了。





5.2 使用myeclipse上传

在myeclipse中配置maven我在这里就不再说明了。网上有许多的资料。我们能够在myeclipse中新建一个web项目,命名为:nexusMaven,并为其加入maven支持。在生成的这个maven项目中找到pom.xml,进行例如以下配置。


    <distributionManagement>
  <!-- 公布到 快照版本号的仓库,即 測试版本号仓库 -->
  <snapshotRepository>
  <id>snapshots</id>
  <url>http://127.0.0.1:8080/nexus-2.6.2/content/repositories/snapshots/</url>
  </snapshotRepository>
  <!-- 公布到 发行版本号的仓库中,也能够公布到3rd party 仓库 -->
  <repository>
    <id>releases</id>
  <url>http://127.0.0.1:8080/nexus-2.6.2/content/repositories/releases/</url>
  </repository>
  </distributionManagement>
  


同一时候须要到我们的maven的conf文件夹下的settings.xml加入账号密码支持。大约在114行后面的servers中配置:

 <server>
      <id>releases</id>
      <username>admin</username>
      <password>admin123</password>
    </server>
	<server>
      <id>snapshots</id>
      <username>admin</username>
      <password>admin123</password>
    </server>

然后回到我们的myeclipse的项目中,右键这个项目。run as   ->  maven build  ,然后输入deploy进行部署。





这样我们的project就上传到了私服中。



能够总浏览器中看到我们刚才上传的这个project。




六、从私服下载(引用)jar包

相同,在前面新建的mavenproject中的pom.xml中进行配置。


<!-- 依赖pig.jar包,存在私服中  -->
  <!-- maven坐标 -->
    <dependency>
      <groupId>pig</groupId>
      <artifactId>pig</artifactId>
      <version>0.12.1</version>
    </dependency>
  </dependencies>
  
  <!-- 假如没有私服 。则 本地仓库找不到,则訪问中心仓库
       假如有私服 :訪问顺序 
         首先訪问本地仓库
     本地仓库没有。则訪问私服仓库
     私服仓库也没有,则訪问中心仓库
   -->
   <!-- 载入的是 第三方项目使用的jar包 -->
   <repositories>
    <repository>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
      <id>public</id>
      <name>public</name>
      <url>http://127.0.0.1:8080/nexus-2.6.2/content/groups/public/</url>
    </repository>
  </repositories>
  
  <!-- 载入的是maven生命周期插件的jar包 -->
  <pluginRepositories>
    <pluginRepository>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
      <id>public</id>
      <name>public</name>
      <url>http://127.0.0.1:8080/nexus-2.6.2/content/groups/public/</url>
    </pluginRepository>
  </pluginRepositories>


总结:使用nexus来搭建maven私有服务器是很有用的功能,对于maven的环境搭建这里就不再重复啰嗦了。

项目组开发者开发时。仅仅要在项目的pom.xml文件里。加入例如以下pom.xml信息就可以获取私服的jar.假设加入其它的构件时,会先在nexus私服下载好。以后才会下载到本地。以后,假设发现私服已经存在某一jar包,则会直接从私服下载,假设没有再去网络上下载。这就是搭建私服的优点.


源代码下载:https://github.com/sdksdk0/nexusMaven






相关文章:

  • Py徐少攻关之初探 编码 语言分类 (2)
  • 从高大上航拍到接地气撒农药,大疆推出MG-1农业植保机
  • mongo中命令工作原理
  • 「镁客·请讲」黑晶VR徐强:VR教育先抓核心阵地,快速攻占学校
  • 标榜着“有情绪”的机器人们,真的有情绪吗?
  • spring boot 集成 elasticsearch 2.4.6
  • zabbix故障:apache源码和页面上的php红色提示
  • mysql报错问题解决Character set 'utf8mb4' is not a compil
  • 8Manage:可视化项目管理是如何实现的
  • MapReduce基本流程与设计思想初步
  • 关于“Fluent UI”或Ribbon Design报道的补充说明
  • python中的运算符及表达式及常用内置函数
  • Bypass xss过滤的测试方法
  • Open Wifi SSID Broadcast vulnerability
  • Java基础之多线程框架(二)
  • 【Amaple教程】5. 插件
  • co模块的前端实现
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • eclipse(luna)创建web工程
  • Elasticsearch 参考指南(升级前重新索引)
  • github从入门到放弃(1)
  • golang中接口赋值与方法集
  • Javascript基础之Array数组API
  • Node项目之评分系统(二)- 数据库设计
  • PHP的类修饰符与访问修饰符
  • python学习笔记-类对象的信息
  • STAR法则
  • 从零搭建Koa2 Server
  • 对JS继承的一点思考
  • 官方解决所有 npm 全局安装权限问题
  • 记录:CentOS7.2配置LNMP环境记录
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 精彩代码 vue.js
  • 硬币翻转问题,区间操作
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 阿里云ACE认证之理解CDN技术
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (C语言)二分查找 超详细
  • (day 12)JavaScript学习笔记(数组3)
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (三)终结任务
  • (万字长文)Spring的核心知识尽揽其中
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (循环依赖问题)学习spring的第九天
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .net 后台导出excel ,word
  • .NET企业级应用架构设计系列之技术选型
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • @Documented注解的作用
  • @Responsebody与@RequestBody