java - 运行 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
解决方案
回来报告如何解决这个问题。
我不得不添加另外两个依赖项: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>
推荐阅读
- python - 在 for 循环后返回
- python - 在服务器上持久运行 Python 脚本
- python - 我可以在嵌入式 Python 块中有多个输入吗?
- java-8 - 使用 Stream 从列表中获取最高价值的不同元素
- sql - 如何对 PostgresQL 中 2 个不同查询的结果求和
- python - 在 python 中使用 split with strip 的最有效方法
- python - 我们可以为两个不同的链接使用不同的 PASSWORD_RESET_TIMEOUT_DAYS 值吗?
- android - 活动重新启动而不是恢复
- arrays - 如何找到数组的后半部分
- audio - ffmpeg:可能不同分辨率的图像和视频的复杂连接