关于maven构件解析步骤请看maven---6仓库-->6从仓库解析依赖的机制
1依赖解析错误
1.1错误结果
1.2产生可能原因
从私服上下载构件(依赖或插件)时由于私服服务器不稳定或者网络原因导致传输文件失败。
- 上面失败原因是解析stanford-corenlp-3.3.1.jar失败,而解析stanford-corenlp-3.3.1.jar失败是因为从私服上传输文件到本地失败,错误返回码是500,说明私服传输出现问题。
- 看一下本地stanford-corenlp-3.3构件的内容:
- 其中stanford-corenlp-3.3.1.jar.lastUpdated文件记录的是最近一次maven根据更新规则或者(-U)命令执行的一次正常检查更新失败的原因。如果更新成功就没有该文件,内容如下:
#NOTE: This is an Aether internal implementation file, its format can be changed without prior notice.
#Mon Jan 09 22:48:23 CST 2017
@default-nexus-mirror-http\://172.19.201.155\:8081/repository/maven-public/.lastUpdated=1483973303784
http\://localhost\:8081/repository/maven-public/.lastUpdated=1480213183807
http\://localhost\:8081/repository/maven-public/.error=
http\://172.19.201.155\:8081/repository/maven-public/.error=Could not transfer artifact edu.stanford.nlp\:stanford-corenlp\:jar\:3.3.1 from/to nexus-mirror (http\://172.19.201.155\:8081/repository/maven-public/)\: Failed to transfer file\: http\://172.19.201.155\:8081/repository/maven-public/edu/stanford/nlp/stanford-corenlp/3.3.1/stanford-corenlp-3.3.1.jar. Return code is\: 500, ReasonPhrase\: Server Error.
1.3解决办法
1.在保证网络畅通的情况下,再次执行一遍相同的maven命令,同时加上-U参数,让maven强制更新,不然如果在新的更新周期没到后,maven会直接将上次缓存的失败结果返回给你,如下图返回缓存失败结果。
2.上一个方法有可能还会失败:因为-U会和私服交互检查更新pom.xml中的所有构件,如果pom.xml中的构件很多,有可能还会因为私服不稳定等原因造成此次执行失败。那么有一种情况可以不使用-U,首先要明白,凡是pom.xml中的构件在本地仓库中存储xxxx.lastUpdated文件,那么maven就会去远程仓库检查更新(当然如果在更新周期没到期间会直接返回上次更新失败结果),更新成功就会删掉该文件,失败会继续存在。所以把pom.xml中构件在本地仓库中的xxxx.lastUpdated文件删除掉,这样maven在执行命令时,发现依赖的构件存在直接使用,而不去更新(如果存在xxxx.lastUpdated肯定会连接私服更新),发现构件不存在就去下载。当然这只适合构件不太多情况。