本文共 10759 字,大约阅读时间需要 35 分钟。
博主折腾了很久,终于通过各种看资料, 稍微弄懂了一点私服。现在将自己的理解记录下来。
背景 实验室需要有一个比较大的项目,想要把功能尽可能细分。这里使用maven来管理项目。项目被细分为project-parent、project-war、project-a、project-b。其中后三个项目只是集成parent的pom的一些jar包,并不是模块关系。然后本人搭建了一个私服,想要从私服上下载jar包。 Nexus安装 关于安装教程见 Nexus配置 一、搭建完私服,使用默认账号登录admin/admin123proxy是远程仓库的代理。比如说在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包都是从这里下载的。四、配置预置的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