无法加载mojo 'test' - org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M1:test

18

我正在使用Maven-3构建我的应用程序,我猜测在maven-surefire-plugin自动更新到3.0.0-M1之后,我无法构建并且出现以下错误。

作为初始步骤,我已经清除了存储库中/ org / apache / maven目录,但是仍然遇到问题。 有人能给些建议吗?注意-如果我将surefire插件降级到2.x,则可以构建它。

错误记录

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 15.444s
[INFO] Finished at: Thu Nov 08 16:04:53 GMT 2018
[INFO] Final Memory: 60M/704M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M1:test (default-test) on project TEST_PROJECT: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M1:test failed: Unable to load the mojo 'test' (or one of its required components) from the plugin 'org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M1': com.google.inject.ProvisionException: Guice provision errors:
[ERROR] 
[ERROR] 1) No implementation for org.codehaus.plexus.languages.java.jpms.LocationManager was bound.
[ERROR] while locating org.apache.maven.plugin.surefire.SurefirePlugin
[ERROR] at ClassRealm[plugin>org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M1, parent: sun.misc.Launcher$AppClassLoader@5c647e05]
[ERROR] while locating org.apache.maven.plugin.Mojo annotated with @com.google.inject.name.Named(value=org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M1:test)
[ERROR] 
[ERROR] 1 error
[ERROR] role: org.apache.maven.plugin.Mojo
[ERROR] roleHint: org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M1:test
[ERROR] -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M1:test (default-test) on project TEST_PROJECT: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M1:test failed: Unable to load the mojo 'test' (or one of its required components) from the plugin 'org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M1'
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:225)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Caused by: org.apache.maven.plugin.PluginExecutionException: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M1:test failed: Unable to load the mojo 'test' (or one of its required components) from the plugin 'org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M1'
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:115)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
    ... 19 more
Caused by: org.apache.maven.plugin.PluginContainerException: Unable to load the mojo 'test' (or one of its required components) from the plugin 'org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M1'
    at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getConfiguredMojo(DefaultMavenPluginManager.java:488)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:92)
    ... 20 more
Caused by: org.codehaus.plexus.component.repository.exception.ComponentLookupException: com.google.inject.ProvisionException: Guice provision errors:

1) No implementation for org.codehaus.plexus.languages.java.jpms.LocationManager was bound.
  while locating org.apache.maven.plugin.surefire.SurefirePlugin
  at ClassRealm[plugin>org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M1, parent: sun.misc.Launcher$AppClassLoader@5c647e05]
  while locating org.apache.maven.plugin.Mojo annotated with @com.google.inject.name.Named(value=org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M1:test)

1 error
      role: org.apache.maven.plugin.Mojo
  roleHint: org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M1:test
    at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:257)
    at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:245)
    at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getConfiguredMojo(DefaultMavenPluginManager.java:455)
    ... 21 more
Caused by: com.google.inject.ProvisionException: Guice provision errors:

1) No implementation for org.codehaus.plexus.languages.java.jpms.LocationManager was bound.
  while locating org.apache.maven.plugin.surefire.SurefirePlugin
  at ClassRealm[plugin>org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M1, parent: sun.misc.Launcher$AppClassLoader@5c647e05]
  while locating org.apache.maven.plugin.Mojo annotated with @com.google.inject.name.Named(value=org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M1:test)

1 error
    at com.google.inject.internal.InjectorImpl$3.get(InjectorImpl.java:974)
    at com.google.inject.Scopes$1$1.get(Scopes.java:59)
    at org.sonatype.guice.bean.locators.LazyBeanEntry.getValue(LazyBeanEntry.java:83)
    at org.sonatype.guice.plexus.locators.LazyPlexusBean.getValue(LazyPlexusBean.java:49)
    at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:253)
    ... 23 more 

2
没有自动刷新意味着您的构建未正确配置,这意味着它们没有定义所有插件版本... - khmarbaise
2
我们从2018年11月7日开始注意到这个问题。我发现他们在11月6日刚刚发布了一个新的maven二进制文件(3.6.0)。我下载了最新版本,在Linux上可以正常工作,但在Windows上出现了一些其他路径相关的错误(FileNotFoundException)。你能试试最新版本吗? - wildnux
@wildnux 是哪种FileNotFoundExceptions?请报告问题 https://issues.apache.org/jira/browse/MNG - khmarbaise
@khmarbaise 这就是 -U 的作用。除非你在几个星球上追逐过这只兔子,否则很难知道什么会引入什么。 - Ricky
尝试使用3.6.0 Maven,仍然出现问题[ERROR]无法执行目标org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M1:test(默认测试)在项目TEST-PROJECT上:目标org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M1的Execution default-test:test失败:无法加载mojo'test'(或其所需组件之一)来自插件'org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M1':com.google.inject.ProvisionException:Guice提供错误:[ERROR] [ERROR] 1)未绑定org.codehaus.plexus.languages.java.jpms.LocationManager的实现 - NGBeginner
相关问题:Maven无法运行junit测试;我遇到了这个问题是因为Junit 5需要Surefire插件。这个问题的答案解决了2.x版本,如果你被迫使用过时的Maven(我在一台管理员不想从3.0.5更新的机器上工作),可以将其包含进去。 - Davy M
8个回答

20

您可以升级您的Maven版本到最新的3.6.0版本来解决这个问题。该版本与3.3.9 Maven版本兼容。


8

通过查看有关升级maven版本的评论,我们更新了我们的maven版本,并成功使用maven 3.3.9解决了surefire插件问题。没有遇到任何问题。


2
尝试使用3.6.0 Maven,仍然遇到问题[ERROR] 在项目TEST-PROJECT上执行目标org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M1:test(default-test)失败:无法加载插件'org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M1'的mojo'test'(或其所需组件之一):com.google.inject.ProvisionException:Guice提供错误: [ERROR] [ERROR] 1)未绑定org.codehaus.plexus.languages.java.jpms.LocationManager的实现 - NGBeginner
尝试使用错误的配置。更新到3.3.9/3.6.0后,此问题得到解决。 - SomMS

5

我发现我的NetBeans使用的是非常老的maven(3.0.5),尽管我已经安装了全新的maven。

在我的Mac上,我需要进入菜单“Netbeans/Preferences”,选择“Maven”选项卡,从“Bundled”更改为最新版本,并且这样做可以为我解决上述错误。


4

直到我发现我们没有明确指定surefire插件的版本,我才遇到了这个问题。一旦我更改了我们的pom.xml文件并设置了版本,它就能正常工作。


你能告诉我你使用的Maven和Surefire插件版本吗?我猜测Surefire-3.0.0-M1只支持从Maven-3.3.9开始。 - NGBeginner
1
mvn 3.0.3 - surefire 2.19.1(是的,它很老了。) - Ricky
1
我正在使用一个旧的Maven版本,3.0.5。我将Surefire插件版本设置为2.17。我发现2.21也可以工作。 - whomer

2
你可以使用pluginManagement标签将maven-surefire-plugin版本降级到2.12.4。这对我很有效。

1
如果您在NetBeans IDE中遇到问题,需要更改默认的MavenHome版本,请按照以下步骤操作:在菜单栏中选择工具->选项->点击Java选项卡->在类别下方->执行->Maven home下拉菜单中选择手动安装的Maven位置。

0

我采用了@SomMS的建议并升级了Maven以解决问题。它起作用了。

问题在于,在撰写本文时,CentOS 7上可用的最新版本Maven是3.0.5(默认存储库),这个版本非常旧(2013年2月)。大多数其他发行版都有更新的Maven版本可供使用。

我的唯一解决方案是手动下载并将其二进制文件路径添加到PATH环境变量中。缺点是现在rpm/yum不知道它的存在。


0

我同意SomMS的答案

但是作为FYI,我发现了这个线程,立即排除了maven版本可能是问题的可能性,因为我刚刚(上周)构建了这个RHEL VM,它是新的和闪亮的...... 15分钟后,我决定检查maven版本,结果发现是v3.0.5!希望下一个人不会犯同样的错误

如果你想知道安装的版本如何,请尝试

mvn --version

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接