Maven配置完毕后构建失败,无法下载JAR包,输入mvn help:system后出现No plugin found for prefix 'help'...问题的解决方案
这个问题困扰了我很久,找了很多解决方案,但还是一直无法解决。我在虚拟机中按照标准步骤配置了很多次,每次都能够成功,但一在物理机中,相同的配置步骤带来的结果却总是配置失败,在cmd中输入mvn help:system总是出现No plugin found for prefix 'help' in the current project and in the plugin groups
先记录以下我的思考过程,想直接查看解决方案的可以点击这里:解决方案
物理机环境
OS:Win10家庭中文版
JDK:1.8(这里一定要注意JDK的版本,否则就算配置完成了项目可能也跑不起来)
Maven:3.8.1
起初我以为是操作系统的问题,因为在查看不同人的解决方案时候看到的确很多人重装系统后配置成功了;但电脑中重要的东西实在太多了,这个方案最先被我PASS;
也有很多人说是中央仓库镜像的问题,配置成阿里的就好了。这个方式我也试过,但还是一样的构建失败。期间我还试过华为的镜像等,但全部失败,我慢慢觉得应该不是单纯的镜像的问题。
再后来我看到了另外一种解决方案,这个方案让我看到了一点希望,这里放一下链接:
https://blog.csdn.net/qq_37537009/article/details/107714349
这种方式确实能够帮助我在cmd中成功进行基础构建,但是当我在IDEA中通过Maven下载JAR包时,还是会一直报错,显示JAR包无法下载。
我思考了一下觉得问题还是出在No plugin found for prefix 'help' in the current project and in the plugin groups上。我在Google上查了查,关于这个错误几乎没有什么有价值的信息,我相信能够看到这里的诸位应该深有体会。
直到看到了这则帖子的一句话给了我启发:
大致意思就是help代表了一个特定的前缀的插件,在构建项目时首先会从本地的仓库找起,如果找不到,会跑到配置的镜像中去查找,如果找不到便会报出构建失败。
再然后答主给出了问题可能出现的两个原因:
1、本地仓库的文件损坏了。
2、无法连接远程仓库,基本上大多是网络连接问题。
到这个时候我突然开始问自己,mvn help:system这个命令本身代表了什么。说实话,我只是看到配置maven的教程中有这样一个步骤,我试了,报错了,然后就没然后了。我决定先搞清楚这个问题。于是我搜索了一下这个命令,简单说一下自己的理解吧:运行这个命令时,会对Maven构建项目所必须一些JAR进行下载,这些JAR在我们的pom.xml文件中也能够见到
回到正题。
这个时候我觉得其实出现这种问题的原因确实无外乎这两种:
1、Maven在我配置的中央仓库镜像中找不到这些JAR。
2、网络问题。
但我还是不太敢相信,先说第一种原因,镜像源换了无数个,怎么可能都找不到呢?如果真的找不到,虚拟机中又是如何成功构建的?
再说第二种原因,国外的镜像源确实会存在网络问题,那国内的镜像源呢?
此时,还是那则帖子,最后的一个回帖为我带来了第三种可能
这里的maven-compiler-plugin是一个编译插件,简单说就是指定所编译的JDK版本。于是我开始思考是否因为JDK的原因。
于是我跑到setting.xml中配置了以下我的JDK
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
设置完毕后一定不要忘记两件事:
1、保存修改后的配置文件
2、打开CMD,进入本地仓库所在的路径运行下面这段代码
for /r %i in (*.lastUpdated) do del %i
上面两件事完成后,我重新输入了mvn help:system,竟然开始下载了。
但还没高兴太久,报出了异常;这里我忘记了截图,说是Failed to execute goal...
我查阅了一下是和JRE版本有关的异常,第一反应是由于刚才的设置,但是开始下载本身是件好事,可这里就矛盾了;如果因为我修改了JDK版本才开始下载的话,报错又是怎么回事呢?下载和配置JDK又有什么关系呢?
我想不明白,于是清除了构建失败的,未下载完毕的JAR包,希望能复现我的错误,但这次我输入mvn help:system后,重新报出了No plugin found for prefix 'help' in the current project and in the plugin groups
看到这个报错,我再次陷入沉思,这次的失败让我愈发觉的是网络问题。JDK的配置是否起到了某些作用不得而知。为了确认所需的JAR包在远程仓库中存在,我将镜像重新修改为默认镜像。本次测试构建成功,步骤如下:
解决方案
为了防止国外镜像速度过慢或连接不稳定我翻了一下,但经过后续的几次测试,成功与翻不翻关系不大
一、maven配置文件的配置
maven的配置文件我进行了三处改动,填入位置网上都有很详细的教程,不多赘述
1.配置本地仓库路径
<localRepository>D:\Software\Java\maven_repertory</localRepository>
2.配置中央仓库镜像
<mirror>
<id>repo1 Maven</id>
<name>all repository mirror</name>
<mirrorOf>*</mirrorOf>
<url>https://repo1.maven.org/maven2</url>
</mirror>
3.配置JDK
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
二、打开CMD开始测试
由于我们使用了国外镜像,因此存在ssh证书校验的问题,因此需要在原有命令的基础上加上其他命令;
mvn help:system -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.valid
敲击回车,可以看到开始下载
构建成功
仅仅在CMD中测试构建成功仅仅刚刚开始,最关键的还是在IDE中正常使用,因此我们还需要在IDEA中进行配置。
三、IDEA中的配置
IDEA版本:
依次点击:File > Settings > Build, Execution, Deployment > Build Tools Maven > Maven
首先进行Maven基础配置
这里要注意,如果你是在项目中进行的配置,那就不是全局配置,每次新建项目的时候要进行检查Maven配置是否和自己设置的一致。
将下面这段代码填入Maven设置项中的Importing和Runner两处,这段代码其实就是我们在cmd中测试时后面加上的那一段代码
-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.valid
第一处:
第二处
在IDEA项目界面的右方,有一个Maven按钮,配置完毕之后按照顺序点击以下四个按钮:
一定要注意,有时候可能会出现个别的JAR无法下载的情况,不用着急,重启一下IDEA,及时清理本地仓库未下载完成的JAR多试几次即可,及时清理未下载完成的JAR很重要。
再次给出清理方式:
打开CMD,进入本地仓库所在的路径运行下面这段代码
for /r %i in (*.lastUpdated) do del %i
可以看到,正在下载
到这里我终于解决了这个困扰我许久的问题。
每个人可能在配置Maven时遇到的问题可能都不太一样。遇到问题希望大家不要和我一样心急,一味的着急并不能解决问题,一定要沉下心来对问题具体分析。
回想我这次遇到的问题,我猜想大概率是JDK的配置以及网络这两方面出现了问题。解决了这两个问题,一切自然迎刃而解了。
还有最重要的一点,每一条报错信息都包含着巨大的价值。之前最忽视No plugin found for prefix 'help' 实际上一直在指引我走向问题的解决方案。