前言:
本来想写的基础一点,可是想到如果搜索关键字是私服,应该是使用过maven,因此就不讲的太详细了
在公司真正开发环境往往都是断网或者限制,配置阿里的镜像都无法正常下载,因此想到了在局域网搭建一个专门的服务器,也就是maven私服,搭建私服以后,别人在使用的时候配置私服的镜像,由于是局域网,传输速度会很快,由于博主也刚开始学,可能有些东西也不是特别清楚,经过一天摸爬滚打终于实现了搭建私服并且可以将自己的jar包发送到私服(爬过很多坑,特记载),供他人借鉴以及方便日后查看
私服:
博主在刚开始使用maven的时候都是这样,下载解压,配环境变量,然后换一下配置文件中的镜像,就开始使用,在下载依赖以及构建项目的过程中,都是根据你配制的镜像向中央仓库请求jar包以及相关依赖
而私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。
环境
百度过,有很多专门的 Maven 仓库管理软件,比如Apache Archiva, Artifactory
我这里是别人推荐的Sonatype Nexus,这里是官网提供的新手指引
- JDK,官网推荐的是Java8(估计6-8都可以)
- Maven,版本没限制,一般3.x就可以
- Nexus服务器,提供一下下载地址:Nexus3下载地址
下载不下来的,网盘下载地址链接:https://pan.baidu.com/s/1UBHw1ytJFdiZSx7de324dg 提取码:m5q4
安装运行Nexus
安装和tomcat以及maven类似,直接解压到你想安装的目录即可
如果想要操作方便,可以将Nexus加入环境变量
Path中加入Nexus解压路径
启动Nexus
如果配置了环境变量,则直接输入
nexus /run
没有配置到cd命令到nexus安装路径下的bin文件夹然后在输入nexus /run
如果出错一般是java环境变量配置的不对或者命令输入错误,仔细检查一下
启动成功以后应该是这样
然后在浏览器中验证是否成功
在浏览器输入http://localhost:8081
出现这个页面,证明启动正常
第一次登录修改相关设置
右上角有Sign in按钮进行登录,我是3.0版本,所有默认用户名是admin,密码是admin123
之前使用了一下新版本,密码是在nexus解压目录下有个admin.password的文件,打开以后是密码,然后根据网页提示重新设定密码即可
登录成功后点击右上角Admin可以修改用户信息,比如修改密码等
这个根据自己需求进行修改
新建Maven代理库
首先修改maven配置文件,默认在User/.m2/settings.xml
官网推荐修改部分
<?xml version="1.0" encoding="UTF-8"?>
<settings>
<mirrors>
<mirror>
<!--This sends everything else to /public -->
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8081/repository/maven-proxy/</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<!--Enable snapshots for the built in central repo to direct -->
<!--all requests to nexus via the mirror -->
<repositories>
<repository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<!--make the profile active all the time -->
<activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>
如果你没修改过配置文件,那么直接用这个代码替换掉即可
然后在Nexus页面创建自己的代理仓库
选择maven2(proxy)【代理库】
然后填写三个必填字段(新版本应该是两个)
Name:maven-proxy(可以填自己的)
Remote Storage:https://repo1.maven.org/maven2(远程仓库指向中央仓库)
Blob store :选择default即可
然后点击确定,就可以在Repositories下面看到自己刚建的仓库了
创建项目进行测试
首先查看自己代理仓库
新建一个文件夹,然后创建一个pom.xml,使用mvn package进行测试,如果提示Build Success,则证明配置成功
pom.xml文件内容如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>top.collegework</groupId>
<artifactId>SourceCode</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.12.1</version>
</dependency>
</dependencies>
</project>
里面加入了两个依赖,一个是junit一个是jsoup,可以和最后运行结束后进行对比
然后通过cmd的cd命令进入你新建的文件夹,我的是建在E盘
e:
cd E:\RamblerDesigner\test-maven
mvn package
我的文件夹是test-maven
然后通过mvn package命令打包(正确配置maven才行)
然后在去仓库看看
发现在你的代理库中缓存了jsoup,而且版本和你填写的一致
至此证明私服配置成功!!!
一些误区
1. 当初以为既然其他人镜像配置的是我的电脑,经过实验, 请求一些包也会存在于maven-proxy那个库, 那也就是说我可以把包上传到我创建的maven-proxy库, 这样在请求的时候就不需要在下载了, 但是经过尝试发现,根本无法上传, 无论是直接打成jar包,通过mvn clean deploy -U也无法上传,期间经过各种坑, 比如账号密码的配置, 最后一步发现包的405错误,经过百度之后发现, 应该是设置的仓库没有deployment权限, 于是经过一些了查找都找不到怎么设置, 最后才知道我创建的是proxy仓库, 也就是只是一个代理, 也可以理解成是一个中转站, 而不是一个仓库
2. 设置镜像的地址,有人可能纠结到底应该写你设置的代理库的地址还是maven-public那个, 根据我一些浅显的理解
其中①是寄主仓库,存储本地上传的组件和资源的
③是代理仓库,用户先请求代理,如果代理仓库没有资源,则根据代理仓库配置的远程库中进行下载, 类似于中转站
②是仓库组, 通常包含了多个代理仓库和宿主仓库,在项目中只要引入仓库组就可以下载到代理仓库和宿主仓库中的包
可以看一下仓库组中配置
上面图片中的文字,可以看一下这个图,从别人博客上拔下来的的....
3. Release版本和snapshots,一个是发布版本,一个是快照版,具体区别,没研究过