项目组大部分人员不能访问maven的central repository,因此在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到这台私服上 

环境是:nexus-2.1.1、maven-3.0.4、jdk-1.6.0_32 

一、用admin用户登陆nexus 

nexus的下载和安装都很简单

  1. .下载
  2. .安装和启动服务
  3. -bundle.zip解压到nexus目录中。
  4. 、配置环境变量
  5. 、执行nexus 服务安装
  6. 、如果启动报错(错误如下)
  7. 、window 启动后,再次找到nexus服务,启动或者停止,看服务是否正常。
  8. 、地址栏上输入
  9. http://localhost:8081/nexus
  10. 如果到此处,都一切正常说明,你成功了!
  11. 默认用户名admin,密码为admin123

nexus的配置需要用admin角色完成,默认的密码是admin123,进入nexus首页之后,点击右上角,进行登录 

然后就可以在左边的菜单中进行配置了 

二、为nexus配置代理服务器 

由于这台机器需要通过代理才能访问外网,所以首先要配置代理服务器,在Administration-->Server中进行配置 



配置之后,nexus才能连上central repository,如果私服所在机器可以直接上外网,则可以省略这一步 

三、配置repository 

在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的地址就可以了 

nexus装好之后,已经初始化定义了一些repository,我们熟悉之后,就可以自行删除、新增、编辑 

右边那个Repository Path可以点击进去,看到仓库中artifact列表。不过要注意浏览器缓存。我今天就发现,明明构件已经更新了,在浏览器里却看不到,还以为是BUG,其实是被浏览器缓存了 

四、配置Central Repository的proxy 

最关键的一个配置,可能就是Central Repository的proxy配置,因为大部分的构件,都是要通过这个proxy得到的 



在安装完nexus之后,这个proxy是预置的,需要做的就是把Download Remote Indexes改为true,这样nexus才会从central repository下载索引,才能在nexus中使用artifact search的功能 

网络上有一些其他公开的maven仓库,可以用同样的办法,在nexus中设置proxy,但是并不是所有maven仓库,都提供了nexus index,这种情况下,就无法建立索引了 

五、配置hosted repository 

一般会配置3个hosted repository,分别是3rd party、Snapshots、Releases,分别用来保存第三方jar(典型的比如ojdbc6.jar),项目组内部的快照、项目组内部的发布版 



这里并没有什么特别的配置,只是Deployment Policy这个选项,一般Snapshots会配置成允许,而Releases和3rd party会设置为禁止 

六、配置group repository 

前面说过,group其实是一个虚拟的仓库,通过对实体仓库(proxy、hosted)进行聚合,对外暴露一个统一的地址 



这里要注意的是,放到左边的仓库,才是会被聚合的仓库。我昨天一直搞错了,把仓库都放到右边,结果group什么都没有聚合到,是一个空的仓库。。。 

七、配置用户密码 

在Security-->Users中配置,在deployment用户上点击右键,选择Set Password,然后设置一个密码,做这个操作是为了后面提交做准备 



八、在用户机器上配置settings.xml 

经过前面的7个步骤,nexus就配置好了,接下来需要在每个开发人员的开发机器上进行配置了 

配置文件在%USER_HOME%/.m2/settings.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  5. <servers>
  6. <server>
  7. <id>nexus-snapshots</id>
  8. <username>deployment</username>
  9. <password>deployment</password>
  10. </server>
  11. </servers>
  12. <mirrors>
  13. <mirror>
  14. <id>nexus</id>
  15. <name>internal nexus repository</name>
  16. <url>http://10.78.68.122:9090/nexus-2.1.1/content/groups/public/</url>
  17. <mirrorOf>central</mirrorOf>
  18. </mirror>
  19. </mirrors>
  20. </settings>
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  5. <servers>
  6. <server>
  7. <id>nexus-snapshots</id>
  8. <username>deployment</username>
  9. <password>deployment</password>
  10. </server>
  11. </servers>
  12. <mirrors>
  13. <mirror>
  14. <id>nexus</id>
  15. <name>internal nexus repository</name>
  16. <url>http://10.78.68.122:9090/nexus-2.1.1/content/groups/public/</url>
  17. <mirrorOf>central</mirrorOf>
  18. </mirror>
  19. </mirrors>
  20. </settings>

这里只配置了2个元素<mirrors>和<servers> 

首先这里配置了一个id为nexus的镜像仓库,地址是前面配置的public group的URL,然后镜像目标是central 

maven里的超级pom,里面配置了这样一段:

  1. <repositories>
  2. <repository>
  3. <id>central</id>
  4. <name>Central Repository</name>
  5. <url>http://repo.maven.apache.org/maven2</url>
  6. <layout>default</layout>
  7. <snapshots>
  8. <enabled>false</enabled>
  9. </snapshots>
  10. </repository>
  11. </repositories>
  12. <pluginRepositories>
  13. <pluginRepository>
  14. <id>central</id>
  15. <name>Central Repository</name>
  16. <url>http://repo.maven.apache.org/maven2</url>
  17. <layout>default</layout>
  18. <snapshots>
  19. <enabled>false</enabled>
  20. </snapshots>
  21. <releases>
  22. <updatePolicy>never</updatePolicy>
  23. </releases>
  24. </pluginRepository>
  25. </pluginRepositories>
  1. <repositories>
  2. <repository>
  3. <id>central</id>
  4. <name>Central Repository</name>
  5. <url>http://repo.maven.apache.org/maven2</url>
  6. <layout>default</layout>
  7. <snapshots>
  8. <enabled>false</enabled>
  9. </snapshots>
  10. </repository>
  11. </repositories>
  12. <pluginRepositories>
  13. <pluginRepository>
  14. <id>central</id>
  15. <name>Central Repository</name>
  16. <url>http://repo.maven.apache.org/maven2</url>
  17. <layout>default</layout>
  18. <snapshots>
  19. <enabled>false</enabled>
  20. </snapshots>
  21. <releases>
  22. <updatePolicy>never</updatePolicy>
  23. </releases>
  24. </pluginRepository>
  25. </pluginRepositories>

因此,当本地的maven项目,找不到需要的构件(包括jar包和插件)的时候,默认会到central里获取 

所以我们刚刚配置的镜像仓库,id也是central,这样本地maven项目对central repository的请求,就会转到镜像仓库上,也就是我们设置的nexus私服上 

由于我们在项目的pom里,不会再配置其他的<repositories>和<pluginRepositories>元素,所以只要配置一个central的mirror,就足以阻止所有的外网访问。如果pom中还配置了其他的外网仓库,比如jboss repository等,可以把<mirrorOf>改为* 

至于<servers>元素,是因为我们把项目内部的构件上传到nexus的仓库中时,nexus会进行权限控制,所以这里需要设置权限相关的信息。注意这里的<id>nexus-snapshots</id>,和后面maven工程里的pom设置是一致的 

由于我们这里已经屏蔽了对外网仓库的请求,所以就不需要配置代理服务器了,如果需要配置代理服务器,可以用<proxies>元素 

九、配置maven项目的pom文件 

下面是简化后的pom文件:

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.huawei.inoc.wfm.task</groupId>
  5. <artifactId>task-sla</artifactId>
  6. <version>0.0.1-SNAPSHOT</version>
  7. <name>task-sla</name>
  8. <!-- 配置部署的远程仓库 -->
  9. <distributionManagement>
  10. <snapshotRepository>
  11. <id>nexus-snapshots</id>
  12. <name>nexus distribution snapshot repository</name>
  13. <url>http://10.78.68.122:9090/nexus-2.1.1/content/repositories/snapshots/</url>
  14. </snapshotRepository>
  15. </distributionManagement>
  16. </project>
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.huawei.inoc.wfm.task</groupId>
  5. <artifactId>task-sla</artifactId>
  6. <version>0.0.1-SNAPSHOT</version>
  7. <name>task-sla</name>
  8. <!-- 配置部署的远程仓库 -->
  9. <distributionManagement>
  10. <snapshotRepository>
  11. <id>nexus-snapshots</id>
  12. <name>nexus distribution snapshot repository</name>
  13. <url>http://10.78.68.122:9090/nexus-2.1.1/content/repositories/snapshots/</url>
  14. </snapshotRepository>
  15. </distributionManagement>
  16. </project>

这里配置了<distributionManagement>元素,其中的<id>nexus-snapshots</id>,与前面说的settings.xml中的<servers>元素中的配置必须一致 

配置这个的目的,是当执行maven deploy时,才知道要将生成的构件部署到哪个远程仓库上,注意这里的URL填的就不是public group的地址: 
http://10.78.68.122:9090/nexus-2.1.1/content/groups/public/ 

而是snapshots的地址: 
http://10.78.68.122:9090/nexus-2.1.1/content/repositories/snapshots/ 

但是在nexus中,snapshots也是聚合到public group里的,所以开发人员A提交到snapshots的构件,开发人员B也可以从public group里获取到 

十、eclipse中的设置 

经过前面的配置,已经可以通过命令行进行maven操作了。不过实际开发中,一般都是使用eclipse的m2e插件,所以还需要对eclipse进行一些额外的配置 

在Preferences-->Maven-->User Settings中,点击Update Settings,加载刚才我们对settings.xml的更改 



然后在Maven Repositories视图里,可以看到仓库的情况 



可以看到,从超级pom继承来的central被置灰了,不可用,后面的mirrored by nexus表示对该仓库的所有请求,都会转到镜像nexus中 

十一、nexus的目录结构 

nexus会安装在%USER_HOME%/sonatype-work/nexus下,有以下目录 



其中的storage目录,就是构件实际存放的地址了

Window下Nexus私服搭建的更多相关文章

  1. window下Nexus私服高级搭建

    环境是:nexus-2.1.1.maven-3.0.4.jdk-1.6.0_32 一.用admin用户登陆nexus nexus的下载和安装都很简单 1.下载 http://www.sonatype. ...

  2. Centos7.0下Nexus私服搭建

    1.下载nexus wget https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.11.2-03-bundle.tar. ...

  3. ava Maven项目之Nexus私服搭建和版本管理应用

    目录: Nexus介绍 环境.软件准备 Nexus服务搭建 Java Maven项目版本管理应用 FAQ 1.Nexus介绍 Nexus是一个强大的Maven仓库管理器,它极大地简化了自己内部仓库的维 ...

  4. nexus私服搭建及信息配置

    nexus私服搭建及信息配置 下载 登录nexus官网下载nexus安装包https://help.sonatype.com/repomanager2/download/download-archiv ...

  5. Java Maven项目之Nexus私服搭建和版本管理应用

    转载自:https://cloud.tencent.com/developer/article/1010603 1.Nexus介绍 Nexus是一个强大的Maven仓库管理器,它极大地简化了自己内部仓 ...

  6. 【转】android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)

    原文网址:http://www.cnblogs.com/zdz8207/archive/2012/11/27/android-ndk-install.html android 最新 NDK r8 在w ...

  7. android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)

      android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创) 一直想搞NDK开发却一直给其他事情耽搁了,参考了些网上的资料今天终于把 ...

  8. Android NDK r8 Cygwin CDT 在window下开发环境搭建 安装配置与使用 具体图文解说

    版权声明:本博客全部文章均为原创.欢迎交流.欢迎转载:转载请勿篡改内容,而且注明出处,谢谢! https://blog.csdn.net/waldmer/article/details/3272500 ...

  9. Nexus私服搭建

    maven私服的搭建 --> maven -->{ 1,本地仓库(从中央仓库下载保存到本地的或者自己到网上下载的jar文件包) 2,远程仓库 -->{ 1,中央仓库(maven官方j ...

随机推荐

  1. 发布b3log-solo后,访问http://localhost:8080/b3log-solo/提示错误为staticServePath Error。

    发布b3log-solo后,访问http://localhost:8080/b3log-solo/提示错误为staticServePath Error. latke.props内容为: serverS ...

  2. Ubuntu下adb的安装

    1.adb简述: adb全称Android Debug Bridge,安卓调试桥接器.它是Android sdk里的一个工具,用这个工具可以直接操作管理android模拟器或者真实的andriod设备 ...

  3. UVa 814邮件传输代理的交互

    好吧,终于知道原来string有这么多用法,map可以通过vector来映射多个数 #include <iostream> #include <string> #include ...

  4. 本文使用springMVC和ajax,实现将JSON对象返回到页面

    一.引言 本文使用springMVC和ajax做的一个小小的demo,实现将JSON对象返回到页面,没有什么技术含量,纯粹是因为最近项目中引入了springMVC框架. 二.入门例子 ①. 建立工程, ...

  5. phpwind数据同步本地之后板块排版乱

    排版紊乱的问题一般是css文件的问题 解决思路 1.打开chrome调用F12,查看是不是css文件没有获取. 2.如果没有获取到的话检查css文件的路径. 在本例中phpwind数据同步到本地之后, ...

  6. UVALive-4329 Ping pong (树状数组)

    题目大意:有n个数排成一列,问从中能找出几个三元组(ai,aj,ak)满足i<j<k并且这三个数严格单调. 题目分析:枚举中间的数字aj,如果aj前面有c(j)个数a(j)小,后面有d(j ...

  7. 【HNOI2004】【P1365】L语言

    tire水题,%Menci 原题: 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章.一段文章T是由若干小写字母构成.一个单词W也是由若干小写字母构成. ...

  8. C#中有关string和byte[]转换的问题

    byte[] byteArray = System.Text.Encoding.Default.GetBytes( str ); 怎么样,够简单吧? 反过来也是一样,把byte[]转成string: ...

  9. 浅拷贝,深拷贝---ios

    #import <Foundation/Foundation.h> @interface Father : NSObject <NSCopying,NSMutableCopying& ...

  10. Python中urlretrieve函数

    API定义: urllib.request.urlretrieve(url,filename=None,reporthook=None, data=None) 利用urlretrieve() 将数据下 ...