之前因为学校考试环境部署,专门的学习了一小段的nexus,其实是离不开maven的学习的,当时大大小小的问题碰到不少,今天一个小师妹的一个问题还是让我产生了思考:
相同的问题引起的原因可能是千差万别的,但其根源是不变的,之前也是疏于记录,对其规律没有很好的,今天主要记录一下503和401这两个问题:
503:不能连接到服务
分析:
1.连接不到服务最容易想到的就是该服务是否开启,最简单的方法就是访问一下,如果能访问则没有问题,如果不能这个时候就需要做两件事情:
1)检查防火墙(在这里直说linux的,windows的请自行百度)
firewall-cmd --state #检查防火墙
service firewalld stop #关闭防火墙
2)检查nexus服务
ps -ef |grep nexus #检查服务是否开启
/usr/local/nexus/bin/nginx start #开启nexus服务
2.检查nexus Web端是否正常工作(这个也是在今天发现的一个问题)
在web的可以看见这个仓库的状态已经不提供服务,一般很少会出现这种问题,也可以会当时不用了,后来又用了而忘记了更改状态的情况,最保险的就是点击这个状态后面的地址,如果出现下图证明是仓库本身有了问题
3.是否存在IP冲突,这个就属于网络层次的了,如果真的排除了上面两种情况,这个便也需要排查一下了,这个是网友们的建议,没有碰到过还真是不容易想出来
4.确定访问者和nexus是否在一个局域网或者是否有外网可以直接用,我记得我有个同事,他出差的那个公司有两个局域网竟然,如果要互通需要申请,当时就是互ping,总之具体问题在具体分析,主要就是不要乱,一类类型就往这方面找原因
401:没有通行证
这个可能是就是没有,也有可能是本身有却没有带着,也可能是马虎带错了
分析:
这个原因就太多了,先说一下自己碰到过的
1.配置的字段和Web端的不一致,地址多字少字,或者server仓库不全,或者多个环境下的active节点错误,贴出一个正确的配置供大家参考(本段配置的注意事项见配置下面)
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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>G:\maven\repo</localRepository>
<!-- 设置发布 jar 包时的用户名及密 -->
<servers>
<server>
<id>dynamic-public</id>
<username>用户名</username>
<password>密码</password>
</server>
<server>
<id>dynamic-releases</id>
<username>用户名</username>
<password>密码</password>
</server>
<server>
<id>dynamic-snapshots</id>
<username>用户名</username>
<password>密码</password>
</server>
<server>
<id>thirdparty</id>
<username>用户名</username>
<password>密码</password>
</server>
</servers>
<!-- 设置 central 的路径等,覆盖了maven module builder里面的central配置 -->
<profiles>
<profile>
<id>central</id>
<repositories>
<repository>
<id>central</id>
<name>Central</name>
<url>自己的地址</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<name>Central</name>
<url>自己的地址</url>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>central</activeProfile>
</activeProfiles>
</settings>
说明:
server对应的就是nexus里面的仓库,需要从哪些仓库拉取构件就把哪些仓库配置在这里,id要和仓库的id一致,如果用到了group,也要把group配置在这里
profiles是节点的意思,因为一套环境完全可以部署在不同的虚拟机上这时候也就地址不同,所以我们可以配置多个profiles,这个id可以随便起名字,不过需要注意的是我们每次只会用一个profiles,使用哪一个是有activeProfiles标签来决定的,这个也是id的重要性
在一个Profiles里面可以有多个profile,每个profile对应着仓库的地址,但是我用了group,所以只需要配置一个即可,如果没有用group,则需要有几个server就配置几个profile
附上pom文件的配置
<distributionManagement> <!-- 远程部署管理信息 -->
<repository> <!--部署项目产生的构件到远程仓库需要的信息 -->
<id>自己的仓库名</id>
<name>Nexus Release Repository</name>
<url>自己的地址</url>
</repository>
<snapshotRepository> <!-- 构件的快照部署到哪里?如果没有配置该元素,默认部署到repository元素配置的仓库 -->
<id>自己的仓库名</id>
<name>Nexus Snapshot Repository</name>
<url>自己的地址</url>
</snapshotRepository>
</distributionManagement>
再多说一句,一般settings里面的配置是拉取jar包的,pom里面的配置是depoly的,不过deploy的时候是会进行编译打包的,这个时候需要的jar包本地没有的话也是有拉取jar的操作的
2.基本过了第一步就可以解决了,不过最近又学习到了一个settings文件优先级原因.
pom.xml>用户即setting(.m2setting)>globalsetting(maven解压后的)
一般我们都是会借助IDE来进行编译的,一般我们在settings里面配置了maven的路径就直接用了,也不会出什么问题,如图
但是如果我们从文件目录下进行操作,如图,这个时候settings的访问路径就是pom.xml,.m2下的settings,globalsettings,按照这个顺序依次查找,找到就停止
这个时候如果.m2下面的settings文件没有删除或者是默认的访问自己搭建的私服时就可能会报401了,这并不是因为之前的配置有问题,而是根本没到自己配置的settings文件.如何确定在用哪个配置文件呢
mvn help:effective-settings
运行完毕后我们就可以看到当前生效的settings文件是哪一个了,如果是.m2下面的,要不就直接删掉这个文件,要不就给这个文件配置一套完整的配置,如果还是不行便看第三步
3.这个是几率最小的了,也就是密码可能输入错误,或者不是用的管理员权限的用户名,这个找私服负责人确认一下即可
总结:
这两个错误代码的原因目前就碰到这么多,希望博友有其他原因的在评论中进行交流