简介
- maven的私服,其实有三种专门的maven仓库管理软件可以帮助我们创建私服,这里重点介绍nexus。
- 说是私服,其实就是maven的一个远程仓库。
- 我们知道maven有本地仓库和中央仓库,那么nexus是什么样的仓库呢?
- 一个项目需要插件的时候回先去本地仓库找,没有再去中央找,找到后下载到本地后再使用。
- nexus实际是架设在局域网内的仓库服务,它代理广域网上的所有的中央仓库,供局域网内的maven用户使用。
- 就好比外部所有的“中央仓库”是一个大的油库,自己家里有个油壶,家里的这个小油壶就是“本地仓库”,nexus就是在中间建立的一个小的中转站——商店。这样,外部的所有油库都可以把油放到商店中,我们根据需要把油打到油壶里面。
- maven访问中央是需要外网支持的,在不提供外网或者网速很慢的情况下,很有必要在局域网内搭建nexus私服,让它代理广域网上的中央仓库。
- 所以,当项目中需要某些插件的时候,它会先去本地仓库查找,没有就从nexus请求,如果私服nexus也没有,则从外部的中央仓库下载,缓存到nexus中,再下载到本地仓库中供项目使用。此外,一些无法在中央仓库下载的插件也能从本地上传到nexus中供使用。
安装
- 目前安装在E盘。
- 访问官网点击Products下拉Nexus Repository OSS
- 点击红色按钮
- 下载2.x版本比较好,拉到最下面
- 这个就行了
- 以管理员身份运行start.dat,记住一定要管理员
- 点击右上角log in,默认用户名:admin,密码:admin123
- 然后开始下载nexus索引的更新
- 我们不在这个网站上直接下载,我们自己找安装包下载
- 首先下载indexer-cli-5.1.1.jar包
- 然后到[这个网址]拉到最后下载这个
都下载到同一个目录下,然后在cmd中进入此目录运行:
java -jar indexer-cli-5.1.1.jar -u nexus-maven-repository-index.gz -d indexer
- 需要较久时间,运行完后会出现一个indexer文件夹,把它copy到E:\nexus-2.10.0-02-bundle\sonatype-work\nexus\indexer\central-ctx,全部覆盖,然后重启nexus,到刚才那个网站上就可以看到
- 接下来我们整合maven和nexus
- 到maven的安装目录下找到settings.xml(应该有两个,一个是原本的,一个是自己的仓库的,两个都要)
- 添加私服仓库
- *的意思是所有的请求都走这个镜像
- 上面的url相当于下面第一个的Path
- 配置
- idea端如果还是有一些依赖找不到的话,点击settings,把两个仓库都给update了,remoteupdate不了也没关系
- 上面setting.xml修改之后,在idea中运行maven install或其他指令,如果日志显示jar包是通过我们配置的url来下载的话,那么配置就算成功
否则直接把setting.xml替换成下面这样:
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <localRepository>E:/java/maven/maven-dependcies</localRepository> <servers> <server> <id>nexus</id> <username>admin</username> <password>admin123</password> </server> <server> <id>releases</id> <username>admin</username> <password>admin123</password> </server> <server> <id>snapshots</id> <username>admin</username> <password>admin123</password> </server> </servers>
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8081/nexus/content/groups/public</url> <!--这一行如果注释掉的话则默认直接从远程仓库下载,而不经过私服-->
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases>
<snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases>
<snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>
非中央仓库的jar包无法获取到
- 有些jar包由于版权问题,中央仓库中没有,比如Oracle JDBC驱动、一些比较老的开源jar包等,我们需要手动把它们上传到私服。
- 自己公司开发的jar包并不开源,也需要手动上传
- 到Maven Repository查找该jar并下载以下4个文件到本地仓库即可(不过放在哪个文件夹下要自己搞清楚)
私服的数据源
- 初始情况下,数据源都是中央仓库,但直接从中央仓库https://repo1.maven.org/maven2/(目前配置的就是这个)下载的话实在是太慢了(其实就目前的体验来说还好),不考虑。
- 国内稳定的镜像有http://maven.oschina.net/content/groups/public/和http://mirrors.ibiblio.org/maven2/,还有http://maven.aliyun.com/nexus/content/groups/public,缺点是更新中央某些新版jar包要慢一些,其中oschina较快。
- 设置数据源Remote Storage Location:
- 配置完不知道要不要重启动的说
lastUpdate文件
- maven下载jar包失败会生成这样一个文件,这个需要删掉,maven才会重新尝试下载jar包
- 删掉之后在idea中reimport,如果多次尝试都像上面一样失败的话,大多是出于网络原因,可以直接把setting.xml的url注释掉,这样就会直接取到相应的远程中央仓库下载,应该就能成功。最后再取消注释即可。