Maven创建项目: Failed to execute goal org.apache.maven.plugin( mvn archetype:create)
一、概述:
在使用mvn 命令mvn archetype:create -DgroupId=com.chuanliu.c11 -DartifactId=c11searcher在控制创建maven项目和pom项目时,没有创建成功,错误信息如下:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:2.4:create (default-cli) on project standalone-pom: Unable to parse configuration of 3: mojo org.apache.maven.plugins:maven-archetype-plugin:2.4:create for parameter #: Cannot create instance of interface org.apache.maven.artifact.repository.ArtifactRepository -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginConfigurationException
二、可能的原因有几个,比如Java HOME设置不正确,Maven HOME设置不正确,在Maven3使用Maven2的命令,具体为:
* JAVA_HOME没有设置或者设置有误、m2_home设置有误
* 删除/org/apache/maven/plugins/下的maven-archetype-plugin
* archetype:create命令已经过期,需要使用 archetype:generate 来进行代替(方案可行)
* maven-archetype-plugin 2.3版本的插件有问题,换其它版本进行创建(方案可行)
有了上述的解决方法,所以就对它们一一测试。
三、解决方案:
1、JAVA_HOME没有设置或者设置有误、m2_home设置有误
于是去查询mvn所依赖的版本和jdk版本,截图如下:
如果信息没问题,接着看后面的方案。
2、删除/org/apache/maven/plugins/下的maven-archetype-plugin
下图摘自网上:
按照图片上说的,删除了maven-archetype-plugin,重新执行命令,仍然报同样的错误,如下图所示:
于是继续使用后面的方案。
3、archetype:create命令已经过期,需要使用 archetype:generate 来进行代替
因为我当前使用的是maven3.3的版本,其实从控制台上的错误信息也可看出,报错的是2.4的信息,所以也可猜测出是版本引起来的。经查文档可看出需要使用generate代替create,即将
mvn archetype:generate -DgroupId=com.chuanliu.c11 -DartifactId=c11searcher
代替之前的
mvn archetype:create -DgroupId=com.chuanliu.c11 -DartifactId=c11searcher
4、maven-archetype-plugin 2.4版本的插件有问题,换其它版本进行创建
于是采用以下指令进行尝试,发现可以生成:
mvn org.apache.maven.plugins:maven-archetype-plugin:2.2:create -DgroupId=com.chuanliu.c11 -DartifactId=c11searcher
以上几种方案可能在不同的环境下会有不同可行性,在我本机测试方案3和方案4是可行的。如有朋友有其它解决方案,可以跟我留言。关于create命令就讲到这里。maven在3.0.5及以上就建议采用genrate命令了,建议大家尽量采用genrate代替create命令。