博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nexus私服搭建、配置、上传snapshot
阅读量:2353 次
发布时间:2019-05-10

本文共 10759 字,大约阅读时间需要 35 分钟。

博主折腾了很久,终于通过各种看资料, 稍微弄懂了一点私服。现在将自己的理解记录下来。

背景
实验室需要有一个比较大的项目,想要把功能尽可能细分。这里使用maven来管理项目。项目被细分为project-parent、project-war、project-a、project-b。其中后三个项目只是集成parent的pom的一些jar包,并不是模块关系。然后本人搭建了一个私服,想要从私服上下载jar包。
Nexus安装
关于安装教程见
Nexus配置
一、搭建完私服,使用默认账号登录admin/admin123
登录成功后界面
二、配置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,我们熟悉之后,就可以自行删除、新增、编辑。这里博主删了Apache snapshot等。右边那个Repository Path可以点击进去,看到仓库中artifact列表。

三、配置Central Repository

这个代理是最重要的,因为我们大部分依赖的jar包都是从这里下载的。
这里写图片描述
这个代理是nexus预置的,这里已经将需要修改的部分修改。主要是Download Remote Indexes改为true,这样nexus才会从central repository下载索引,才能在nexus中使用artifact search的功能 。网络上有一些其他公开的maven仓库,可以用同样的办法,在nexus中设置proxy,但是并不是所有maven仓库,都提供了nexus index,这种情况下,就无法建立索引了。

四、配置预置的Hosted Repository

这里预置的三个hosted repository分别是3rd party、Snapshot、Releases。它们的作用分别是:

3rd用来保存第三方jar包;Snapshot用来保存项目组内部的快照;Releases项目组内部的发布版;

这里需要修改的是,将Snapshot中的Deployment Policy这个选项设置为Allow Redeploy。Releases和3rd party设置为禁止。

这里写图片描述

五、配置group repository

group其实是一个虚拟的仓库,通过对实体仓库(proxy、hosted)进行聚合,对外暴露出一个统一的地址,这样在我们引入私服地址的时候,不需要写太多个地址(其实就是central、Releases、3rd party、Snapshot的集合)。

这里写图片描述

六、配置用户密码

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

这里写图片描述

七、配置eclipse的setting.xml

在新版的eclipse中,已经内置了maven插件。找到setting文件。
这里写图片描述
这里写图片描述

附上setting.xml文件

D:\00Coding\apache-maven\repo
nexus-snapshots
deployment
deployment
nexus-releases
deployment
deployment
nexus
public group
http://192.168.2.176:9981/nexus/content/groups/public/
*

这里只配置了2个元素mirrors和servers。首先这里配置了一个id为nexus的镜像仓库,地址是前面配置的public group的URL,然后镜像目标是central。

这里插入一个maven源码中的超级pom(maven是一个开源的软件,感兴趣可以查看源码),我们看到里面配置了这样一段:

~~~
central
Central Repository
http://repo.maven.apache.org/maven2
default
false
central
Central Repository
http://repo.maven.apache.org/maven2
default
false
never
~~~

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

所以我们刚刚配置的镜像仓库,mirrorOf也是central,这样本地maven项目对central repository的请求,就会转到镜像仓库上,也就是我们设置的nexus私服上。由于我们在项目的pom里,不会再配置其他的repositories和pluginRepositories元素,所以只要配置一个central的mirror,就足以阻止所有的外网访问。如果pom中还配置了其他的外网仓库,比如jboss repository等,可以把mirrorOf改为*。
至于servers元素,是因为我们把项目内部的构件上传到nexus的仓库中时,nexus会进行权限控制,所以这里需要设置 权限相关的信息。注意这里的id是nexus-snapshots,以及nexus-releases。后面maven工程里的pom设置是一致的。可以在servers里面配置多个server,比如nexus-releases可以对应是发布版本,nexus-Snapshot是项目快照版本。

八、配置maven项目的pom文件

这里写图片描述

这里parent是打成pom形式,主要是对jar的一些维护。直接看私服部署到私服nexus上的配置吧!

这里写图片描述

这里配置了distributionManagement元素,其中的id属性的值nexus-snapshots与前面说的settings.xml中的servers元素中的配置必须一致。配置这个的目的,是当执行maven deploy时,才知道要将生成的构件部署到哪个远程仓库上,注意这里的URL填的就不是public group的地址,而是snapshots的地址:

但是在nexus中,snapshots也是聚合到public group里的,所以开发人员A提交到snapshots的构件,开发人员B也可以从public group里获取到。
附上parent.pom,包含了一些springmvc需要的依赖。

4.0.0
com.cincc.crm
crm-parent
3.0.0-SNAPSHOT
pom
UTF-8
4.3.0.RELEASE
3.4.0
1.7.21
1.2.17
1.3.0
5.1.39
1.0.20
2.7.4
1.9.13
6.0.1
1.3.2
2.5
junit
junit
4.11
test
org.springframework
spring-core
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-oxm
${spring.version}
org.springframework
spring-tx
${spring.version}
org.springframework
spring-jdbc
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-aop
${spring.version}
org.springframework
spring-context-support
${spring.version}
org.springframework
spring-test
${spring.version}
org.mybatis
mybatis
${mybatis.version}
org.mybatis
mybatis-spring
${mybatis-spring.version}
mysql
mysql-connector-java
${mysql.version}
com.alibaba
druid
${druid.version}
com.fasterxml.jackson.core
jackson-core
${jackson.version}
com.fasterxml.jackson.core
jackson-databind
${jackson.version}
com.fasterxml.jackson.core
jackson-annotations
${jackson.version}
org.codehaus.jackson
jackson-mapper-asl
${json.version}
log4j
log4j
${log4j.version}
org.slf4j
slf4j-api
${slf4j.version}
org.slf4j
slf4j-log4j12
${slf4j.version}
org.apache.lucene
lucene-core
${lucene.version}
commons-fileupload
commons-fileupload
${commons-fileupload.version}
javax.servlet
servlet-api
${servlet.version}
provided
nexus-snapshots
Nexus Snapshot Repository
http://192.168.2.176:9981/nexus/content/repositories/snapshots/
nexus-releases
Nexus Release Repository
http://192.168.2.176:9981/nexus/content/repositories/releases/
org.apache.maven.plugins
maven-compiler-plugin
1.8
1.8

九、Eclipse上部署Snapshot到私服。

选择你需要部署到私服的项目,首先这个项目应该是一个Snapshot版本。然后右击,选择Run As
这里写图片描述
这里写图片描述
保存后,点击Run就可以了。然后在Nexus上的Snapshot仓库里就可以看到啦!就是这么简单。
然后在project-war中,和引入其他依赖一下,引入这个Snapshot版本的包就行了。
这里写图片描述

你可能感兴趣的文章
Vue.js入门学习(三) Class与Style绑定
查看>>
Vue.js入门学习(五)方法与事件处理器、表单控件绑定
查看>>
项目:Vue.js高仿饿了吗外卖APP(一)
查看>>
javascript中一些相对位置
查看>>
vue高仿饿了么课程项目--布局篇学习笔记
查看>>
es6 javascript的Iterator 和 for...of 循环
查看>>
Javascript中的shift() 、unshift() 和 pop()、push()区别
查看>>
将嵌套的数组扁平化
查看>>
vue-router的两种模式及区别
查看>>
c中嵌入python
查看>>
python的C扩展
查看>>
python的USB通信
查看>>
eclipse svn
查看>>
SPSS基础教程:SPSS统计分析基础
查看>>
IBM SPSS Modeler 客户端 vs 服务器的区别详解
查看>>
DataStage On Cloud,构建云端的企业数据集成平台
查看>>
ICMP协议
查看>>
SSL协议
查看>>
IMAP,POP3,SMTP协议
查看>>
数据库协议
查看>>