无法解析类 JunitAdapter

Posted

技术标签:

【中文标题】无法解析类 JunitAdapter【英文标题】:Unable to resolve class JunitAdapter 【发布时间】:2022-01-03 16:31:39 【问题描述】:

我写了一个测试,我从包com/intel/epgsw/JunitAdapter.groovy导入一个类

当我尝试运行测试时,我收到此错误:

[ERROR] Failed to execute goal org.codehaus.gmavenplus:gmavenplus-plugin:1.5:testCompile (groovy) on project jenkinsfile-test-shared-library: Error occurred while calling a method on a Groovy class from classpath. InvocationTargetException: startup failed:
[ERROR] src/test/groovy/CloneTestSpec.groovy: 3: unable to resolve class src.com.intel.epgsw.JunitAdapter
[ERROR] @ line 3, column 1.
[ERROR] import com.intel.epgsw.JunitAdapter
[ERROR] ^

测试文件存在于:src/test/groovy

需要导入的类:com/intel/epgsw/JunitAdapter.groovy 我的测试文件是 CloneTestSpec.groovy

这是树:

src
│   ├── com
│   │   └── intel
│   │       ├── epgsw
│   │       │   ├── TestResultEnum.groovy
│   │       │   ├── **JunitAdapter.groovy**
│   │       │   
│   └── test
│       ├── com
│       │   └── intel
│       │       └── epgsw
│       ├── epgsw
│       │   └── FooBar98.groovy
│       ├── groovy
│       │   ├── **CloneTestSpec.groovy**

这是我的 pom.xml 的一部分

<plugins>
                                <plugin>
                                        <groupId>org.apache.maven.plugins</groupId>
                                        <artifactId>maven-surefire-plugin</artifactId>
                                        <version>2.18.1</version>
                                        <executions>
                                                <execution>
                                                        
                                                        <configuration>
                                                                
                                                        <testSourceDirectory>src/test/groovy</testSourceDirectory>
                                                                <includes>
                                                                        <include>**/*Spec.java</include>
                                                                        <include>**/*Spec.class</include>
                                                                        <include>**/*Spec</include>
                                                                </includes>
                                                                
                                                        </configuration>
                                                </execution>
                                        </executions>
                                </plugin>
                                <plugin>
                                        <groupId>org.codehaus.gmavenplus</groupId>
                                        <artifactId>gmavenplus-plugin</artifactId>
                                        <version>$groovy.gmaven.pluginVersion</version>
                                        <executions>
                                                <execution>
                                                        <id>groovy</id>
                                                        <goals>
                                                                <goal>addTestSources</goal>
                                                                <goal>testCompile</goal>
                                                        </goals>
                                                </execution>
                                        </executions>
                                                        <configuration>
                                                                <sources>
                                                                        <source>
                                                                         <directory>src</directory>
                                                                                <includes>
                                                                                        <include>**/*.groovy</include>

                                                                                </includes>
                                                                        </source>
                                                                </sources>
                                                                <testSources>
                                                                        <testSource>
                                                                                <directory>src/test/groovy/com/intel/epgsw</directory>
                                                                                <includes>
                                                                                        <include>**/*.groovy</include>
                                                                                </includes>
                                                                        </testSource>
                                                                </testSources>
                                                        </configuration>
                                </plugin>
                        </plugins>

【问题讨论】:

我已经对您的previous question 发表了评论,试图让您了解为什么需要MCVE 才能准确回答您的问题。因此,请阅读我链接到的文章并编辑您的问题,提供一个完整的、最小的示例项目来重现该问题,无论是内联的还是在 GitHub 上(首选)。也请给你的问题更多的爱,正确地格式化它们(我只是为你做的)。谢谢你。我知道你是新来的,没问题。但请尝试改进。 你确定包名是src.com.intel.epgsw.JunitAdapter而不是简单的com.intel.epgsw.JunitAdapter 是的,包是 com.intel.epgsw 我的意思是指定问题时的目录。 但是目录应该是src/test/groovy,就像你说的那样。所以这里有不一致的地方。 unable to resolve class src.com.intel.epgsw.JunitAdapter 表示导入语句或您的目录结构错误,包含多余的src。这就是为什么我需要查看 MCVE,如果您无法自行解决。 我尝试使用 com.intel.epgsw.JunitAdapter 导入。仍然遇到同样的问题。为了确保一切正常,我尝试将类 JunitAdapter 复制到我的测试 CloneTestSpec.groovy,然后它工作正常。我已经更新了我的问题,添加了我的项目的树结构。我还应该添加什么? 【参考方案1】:

您的目录布局混乱。请将您的所有测试类移动到 src/test/groovy 基本文件夹中。在那里,您根据包结构创建目录结构。例如(如果没有看到每个文件中的包声明,我不能肯定地说),假设

所有应用程序类都是 Java 类, 所有测试类都是 Groovy 类和 所有类都在完全相同的包中com.intel.epgsw
src
  main
    java
      com
        intel
          epgsw
            ApplicationClassA.java
            ApplicationClassB.java
  test
    groovy
      com
        intel
          epgsw
            TestResultEnum.groovy
            JunitAdapter.groovy
            FooBar98.groovy
            CloneTestSpec.groovy

如果我上面的任何假设都是错误的,您需要相应地调整目录结构。但是您具有 3 个不同基本目录的混乱目录布局会导致您面临的麻烦。请务必学习一些 Java、Groovy 和 Maven 基础知识,尤其是 Maven standard directory layout。

【讨论】:

你猜对了。包是 com.intel.epgsw 创建一个像你建议的目录为我解决了这个问题。非常感谢。

以上是关于无法解析类 JunitAdapter的主要内容,如果未能解决你的问题,请参考以下文章

Pig 无法解析 CassandraStorage 的类版本

Android TabLayout 类无法解析

为啥 liquibase 无法解析 db.changelog 类路径?

JSON解析错误:无法构造类的实例

类模板无法解析的外部符号

类模板无法解析的外部符号