前面我们讲过本地仓库和中央仓库,有时候我们还会在本地仓库和中央仓库中间配置一个私有仓库,这主要是用来管理一些常用的、公共的依赖包。同时也方便我们查询。这里我们使用私有仓库nexus。
一、安装
(1)解压缩之后将
bin路径
添加到环境变量(2)在命令行中使用命令
nexus install
进行安装(3)修改
E:\nexus-2.11.4-01-bundle\nexus-2.11.4-01\bin\jsw\conf
中配置文件的wrapper.java.command=E:\javaJDK\jdk1.8.0_60\bin\java.exe
这一行,将地址改成本地jdk
的路径。(4)使用命令
nexus start
启动。注意:如果启动失败,可能是端口被占用,这里修改E:\nexus-2.11.4-01-bundle\nexus-2.11.4-01\conf\ nexus.properties
中的端口号,默认是8081,我们修改为8082。(5)使用网址
http://localhost:8082/nexus
进行访问。点击左边的Repositories
就可以看到工厂了。登录帐号admin
,密码admin123
。
二、仓库简介
在仓库中我们可以看到有很多类型的仓库
(1)
virtual
是一个针对maven1
的一个转接仓库,现在对我们来说没什么用处,此处不再讲解。(2)
hosted
仓库都是内部项目的发布仓库。在hosted
仓库中release
表示内部项目的release
模块的发布仓库,snapshots
类似。3rd party
表示第三方依赖的仓库,这个数据通常是由内部人员自行下载之后发布上去的,也就是不能自动在中央仓库中下载,比如Orecla
依赖包。(3)
proxy
类型仓库就是代理仓库,也就是要从远程中央仓库寻找数据的仓库。Apache Snapshot
表示的是Apache
的快照版本的仓库,Center
表示中央仓库,点击下面的Configuration
可以看到中央仓库的地址,我们可以更改。Codehaus Snapshot
表示另一个开源组织Codehaus
的快照版本仓库。(4)
group
仓库。组仓库用来方便开发人员进行设置的仓库。也就是一个私有仓库。以后我们所有的下载都从此仓库中进行下载。
三、配置
选中某个仓库,在下面出现列表Configuration
中我们下拉可以看到Ordered Group Repositories
这一项,表示我们这个组中有列表中的仓库,以后我们下载依赖包就只需要去找Public Repositories
也就是group
这个仓库(之后我们会进行设置),它下面包含了很多中央仓库(这样我们在pom/xml
文件中就不需要配置很多中央仓库了),分别下载不同类型的依赖包,旁边两个没有加进来的我们可以自己加入进来。
- (1)配置:在我们的项目中我们不需要管什么中央仓库,统统交给
group
这个仓库给我们管理
nexus
Nexus Repo
http://localhost:8082/nexus/content/groups/public/
true
true
在项目的parent
模块中(user-parent
)中进行上面的配置,其中url
是group
仓库的地址,最后两项表示允许下载release
版本和Snapshot
版本的依赖包。默认的中央仓库中Snapshot
版本是不能下载的。
- (2)镜像配置
在maven
安装包的settings.xml
中进行配置,注意:这个文件是我们自己本地仓库的里面的那个设置文件,而不是maven/conf
中的那个配置文件。
central
*
Human Readable Name for this Mirror.
http://localhost:8082/nexus/content/groups/public/
放在
标签中。
- (3)测试一下
我们可以找一个项目中没有的依赖包添加进去,在user-parent
中:
mockobjects
mockobjects-alt-jdk1.3
0.09
在user-core
中:
mockobjects
mockobjects-alt-jdk1.3
之后我们刷新nexus
的Browse Index
可以看到:
可以看到其配置信息就出现在我们的服务器上了。以后我们就不一定每次都去外面的工厂中找了。私服是更具索引去找依赖的,但是有时候可能索引的版本太低,不符合要求,此时我们需要更新索引。
- (4)更新索引
- 一种方式是选中
Central
仓库在Configuration
中将Download Remote Indexes
的值设置为true
,此时就会自动帮我们更新,但是速度会很慢。
- 另一种方式是手动更新。方法是
在http://repo1.maven.org/maven2/.index/
下载下面两个文件
- 一种方式是选中
nexus-maven-repository-index.properties
nexus-maven-repository-index.gz
同时在
http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.apache.maven.indexer%22%20AND%20a%3A%22indexer-cli%22
下载indexer-cli-5.1.1.jar
。
将下载的三个文件放在同一个目录(E:\nexus-2.11.4-01-bundle\index
)下,然后通过DOS
进入此目录中,使用命令
java -jar indexer-cli-5.1.1.jar -u nexus-maven-repository-index.gz -d indexer
将压缩文件解压,之后在indexer
目录下会看到很多文件。此时我们先将nexus
关闭,然后将这些文件拷贝到
E:\nexus-2.11.4-01-bundle\sonatype-work\nexus\indexer\central-ctx
目录下(将原来的所有文件都删除)。之后启动nexus
,可以在Browse Index
中看到很多索引,我们之后可以自己更新这些索引,右键Central
点击Update Index
即可。
然后我们可以在搜索框中搜索我们想要的索引,不需要去其他地方搜索了。比如我们搜索spring web
会出来很多结果,然后选择org.springframework
中的一个:
org.springframework
spring-web
4.2.5.RELEASE
加入到user-parent
和user-core
中,之后我们在Browse Storage
中就可以找到:
注意:如果我们将本地group仓库的配置去掉,还是会下载的,因为在
maven
的包中本身默认配置了一个中央仓库了。但是这个仓库默认将
Snapshot
关闭了,所以我们需要在项目中进行设置。
但是这样每次都要在项目中进行配置,每个模块都要配置比较麻烦,所以我们需要在 本地仓库中的
setttings.xml
中进行配置:
central-repos
central
central
http://central
true
true
放在
标签中。注意:配置了镜像之后
就没有意义了,随便填一个(这项却不能少),但是还需要在setttings.xml
最后配置:
central-repos
将配置激活。
四、项目发布
- 在本地仓库的
setttings.xml
中配置发布权限:
user-snapshots
deployment
deployment123
user-releases
deployment
deployment123
放在
标签中。这里其实就是给我们发布时的权限。
- 在
user-parent
中配置
user-snapshots
User Project SNAPSHOTS
http://localhost:8082/nexus/content/repositories/snapshots/
user-releases
User Project Release
http://localhost:8082/nexus/content/repositories/releases/
注意:上面配置的其实就是我们的项目发布到哪个仓库,这里配置的是releases
和snapshots
,当然在发布之前我们需要在这两个仓库的配置中配置允许发布。将Deployment policy
设置为Allow Redeploy
,然后保存即可。
注意:此配置中的
id
需要和
maven
仓库
settings.xml
中的
id
对应,同时
url
就是
nexus
中快照仓库和
release
仓库的地址。然后使用命令
clean deploy
进行发布。因为我们发布的是快照版本,所以选中
Snapshots
中的
Browse Storage
刷新之后可以看到我们发布的项目。
五、创建项目工厂和设置权限
在以后的项目开发中我们不能将所有的模块一下子全部发布到公共的哪个release
和Snapshots
仓库中,那样不便于管理,而且有可能冲突,所以我们一般将一些公共的模块发布到公共的release
和Snapshots
仓库中,而一些特殊的模块发布到我们自己的仓库中,所以我们需要创建自己的仓库,这样有利于管理。
-
(1)创建一个自己的
release
版本发布工厂和快照版本发布工厂
点击Add
选择Hosted Repository
,选中之后在下面填写相关信息:
其中第一项和第二项是我们自己填的,然后选择允许发布(默认是不允许的)即可点击save
保存。注意:最后一项如果是release
版本就选择release
,如果是Snapshot
就选择Snapshot
。而快照版本的工厂建立类似。
这样我们就建立好了两个我们自己私有的仓库
-
(2)为上面两个工厂打开权限
点击Security
中的Privileges
,然后点击Add
,在下面填写相关信息:
注意:最好不要写中文。名字我们可以任取,最后和项目工厂id
一样,工厂选择我们release
版本工厂的名字,最后一项按图中选择。点击save
保存。对于快照版本的类似:
注意:配置完之后在上面要出现我们配置的权限才算成功:
-
(3)创建角色并且分配权限
选择Security
中的Roles
,点击Add
,然后进行添加:
Role Id
和Name
由我们自己填写。注意:不要写中文。然后点击Add
,之后我们需要选择刚才添加的权限,这里我们只创建一个角色,所以将快照和release
权限都选中(我们可以在输入框中输入My,然后点击过滤Apply Filter
),点击ok
,之后点击save
保存。 -
(4)创建用户
点击Security
中的Users
,点击Add
Status
中需要选择Active
,然后点击Add
,选择我们刚才创建的角色。保存即可。密码是123456
(5)创建发布工厂
当我们建立好自己的发布工厂之后我们就不要发布到以前那两个仓库中了,所以需要将user-parent
中的配置地址改动
user-snapshots
User Project SNAPSHOTS
http://localhost:8082/nexus/content/repositories/MyUserReposSnapshots/
user-releases
User Project Release
http://localhost:8082/nexus/content/repositories/MyUserReposRelease/
这里改动之后我们在settings.xml
中也需要改动:
user-snapshots
kh
123456
user-releases
kh
123456
当然这里我们只是做一个试验,名字和密码我们可以自己进行配置。
配置完之后再次进行发布,我们可以看到
当然对于一些公共模块,比如
user-log
模块,我们需要配置
user-snapshots
User Project SNAPSHOTS
http://localhost:8082/nexus/content/repositories/snapshots/
user-releases
User Project Release
http://localhost:8082/nexus/content/repositories/releases/
我们这样配置之后就会将user-parent
中的配置覆盖掉,这样就发布到公共的仓库中了。
补:如果公司不能访问外网,则需要配置代理,配置之后一定记得将本地仓库_remote.repositories、**.pom.lastUpdated
文件全部删除。