首页 > 解决方案 > 运行 Maven 插件的单元测试时抛出异常 - ComponentLookupException :: NoSuchElementException :: RepositorySystem

问题描述

我正在尝试使用具有以下依赖项的工件 maven-plugin-testing-harness:3.3.0 对 Maven 插件的 Mojo 运行单元测试。但是当我尝试“lookupEmptyMojo”时,会抛出以下异常。有什么快速解决这个配置问题的方法吗?

...
<properties>
  <maven.api.version>3.6.2</maven.api.version>
<dependencies>
<!-- Maven plugin deps -->
<dependency>
  <groupId>org.apache.maven</groupId>
  <artifactId>maven-plugin-api</artifactId>
  <version>${maven.api.version}</version>
</dependency>
<dependency>
  <groupId>org.apache.maven</groupId>
  <artifactId>maven-core</artifactId>
  <version>${maven.api.version}</version>
  <exclusions>
    <exclusion>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
    </exclusion>
  </exclusions>
</dependency>

<!-- Tests -->
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.8.2</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.apache.maven.plugin-testing</groupId>
  <artifactId>maven-plugin-testing-harness</artifactId>
  <version>3.3.0</version>
  <scope>test</scope>
 </dependency>
</dependencies>
...

例外:

org.codehaus.plexus.component.repository.exception.ComponentLookupException: java.util.NoSuchElementException
  role: org.apache.maven.repository.RepositorySystem
roleHint: 
at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:267)
...
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)

Caused by: java.util.NoSuchElementException
at org.eclipse.sisu.inject.LocatedBeans$Itr.next(LocatedBeans.java:141)
... 28 more

标签: javamavenunit-testingmaven-plugin

解决方案


回来报告如何解决这个问题。

我不得不添加另外两个依赖项:maven-compat 和 maven-resolver-api。

测试工具使用 Maven2 类,所以如果我们使用 Maven3,我们需要添加 lib maven-compat 与我们使用的相同版本的 maven api;这个库实现了与旧 api 的向后兼容性。

RepositorySystem 是 maven-resolver-api 库中的一个接口,它与工件存储库一起工作,可以是远程的、本地的,甚至可以构建反应器或 IDE 工作区。

依赖项被添加到 pom 中,如下所示:

<dependency>
    <groupId>org.apache.maven.resolver</groupId>
    <artifactId>maven-resolver-api</artifactId>
    <version>1.3.1</version>
</dependency>
<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-compat</artifactId>
    <version>${maven.api.version}</version>
    <scope>test</scope>
</dependency>

推荐阅读