【问题标题】:java.lang.NoClassDefFoundError: io/restassured/mapper/factory/GsonObjectMapperFactoryjava.lang.NoClassDefFoundError: io/restassured/mapper/factory/GsonObjectMapperFactory
【发布时间】:2017-07-09 06:24:42
【问题描述】:

当我尝试使用放心框架执行脚本时出现错误。请指导我解决同样的问题。我用下面的罐子

Java version - 8
rest-assured-2.8.0
json-path-2.8.0
hamcrest-all-1.3
commons-lang3-3.0
json-schema-validator-2.2.0



>FAILED: foo
    java.lang.NoClassDefFoundError: io/restassured/mapper/factory/GsonObjectMapperFactory
        at io.restassured.config.RestAssuredConfig.<init>(RestAssuredConfig.java:41)
        at io.restassured.RestAssured.<clinit>(RestAssured.java:420)
        at practice.GetRequest.foo(GetRequest.java:12)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:108)
        at org.testng.internal.Invoker.invokeMethod(Invoker.java:661)
        at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:869)
        at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1193)
        at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126)
        at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
        at org.testng.TestRunner.privateRun(TestRunner.java:744)
        at org.testng.TestRunner.run(TestRunner.java:602)
        at org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
        at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:375)
        at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
        at org.testng.SuiteRunner.run(SuiteRunner.java:289)
        at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
        at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
        at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301)
        at org.testng.TestNG.runSuitesLocally(TestNG.java:1226)
        at org.testng.TestNG.runSuites(TestNG.java:1144)
        at org.testng.TestNG.run(TestNG.java:1115)
        at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
        at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)
        at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)
    Caused by: java.lang.ClassNotFoundException: io.restassured.mapper.factory.GsonObjectMapperFactory
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 28 more


    ===============================================
        Default test
        Tests run: 1, Failures: 1, Skips: 0
    ===============================================


    ===============================================
    Default suite
    Total tests run: 1, Failures: 1, Skips: 0
    ===============================================

【问题讨论】:

    标签: rest-assured


    【解决方案1】:

    根本原因是放心 *ObjectMapperFactory 包名称发生变化,例如在版本 3.x4.x 之间发生变化。

    对于在release of rest-assured 4.0.0 之后遇到此问题的任何人,此问题可能出现在 Spring Boot 项目中 - 由 rest-assured 及其对 json-pathxml-path 中的 spring-boot-dependencies bom 的传递依赖之间的版本不匹配引起。

    如果你指定一个依赖io.rest-assured:rest-assured:4.0.0,你还需要显式包含io.rest-assured:json-path:4.0.0io.rest-assured:xml-path:4.0.0,否则spring-boot-dependencies会使用旧的*ObjectMapperFactory包名引入版本3.1.1

    【讨论】:

    • 这帮助了我!无需手动指定依赖项,您只需覆盖 BOM 属性 extra["rest-assured.version"] = "4.0.0" (Kotlin DSL)
    【解决方案2】:

    对于遇到此问题的任何人,我发现此 git 页面也很有帮助:https://github.com/rest-assured/rest-assured/issues/1168

    我的 maven POM 最终工作的一个例子是这样的:

                <dependency>
                    <groupId>io.rest-assured</groupId>
                    <artifactId>rest-assured</artifactId>
                    <version>${io-rest-assured.version}</version>
                    <scope>test</scope>
                </dependency>
                <!--Added required depeendencies due to : https://github.com/rest-assured/rest-assured/issues/1168 -->
                <dependency>
                    <groupId>io.rest-assured</groupId>
                    <artifactId>rest-assured-common</artifactId>
                    <version>${io-rest-assured.version}</version>
                </dependency>
                <dependency>
                    <groupId>io.rest-assured</groupId>
                    <artifactId>json-path</artifactId>
                    <version>${io-rest-assured.version}</version>
                </dependency>
                <dependency>
                    <groupId>io.rest-assured</groupId>
                    <artifactId>xml-path</artifactId>
                    <version>${io-rest-assured.version}</version>
                </dependency>
    

    【讨论】:

    • 这帮助我克服了 Gson 错误,然后遇到了 Groovy 类路径错误,并且还需要指定 org.codehaus.groovy:Groovy:3.0.2 因为 Spring Boot 测试依赖项引入了不兼容的版本2.5.这就是我使用放心的 4.3.0 所经历的。
    【解决方案3】:

    正如 Jim Riordan 所说,您必须明确包含 io.rest-assured:json-path:4.0.0io.rest-assured:xml-path:4.0.0

    我还需要在我的 maven 依赖项io.rest-assured:spring-mock-mvc 中添加一个排除项

    <dependency>
        <groupId>io.rest-assured</groupId>
        <artifactId>spring-mock-mvc</artifactId>
        <version>4.0.0</version>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <artifactId>rest-assured</artifactId>
                <groupId>io.rest-assured</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    

    【讨论】:

      【解决方案4】:

      另一个选项是定义对rest-assured-all的依赖

        <dependency>
              <groupId>io.rest-assured</groupId>
              <artifactId>rest-assured-all</artifactId>
              <version>4.3.1</version>
              <scope>test</scope>
          </dependency>
      

      如果您使用的是 Spring Mock MVC,则排除 3.X 版本

      <dependency>
          <groupId>io.rest-assured</groupId>
          <artifactId>spring-mock-mvc</artifactId>
          <version>3.3.0</version>
          <scope>test</scope>
          <exclusions>
              <exclusion>
                  <artifactId>rest-assured</artifactId>
                  <groupId>io.rest-assured</groupId>
              </exclusion>
          </exclusions>
      </dependency>
      

      【讨论】:

        【解决方案5】:

        在查看错误时,您需要将 GSON 显式放入您的类路径或 POM 依赖项部分,因为它是 Rest Assured 的可选依赖项。

        <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.1</version>
        </dependency>
        

        【讨论】:

          【解决方案6】:

          对于 Maven 项目,以下代码适用于 Spring Boot 项目:

          <properties>
                 <groovy.version>3.0.7</groovy.version>
                 <rest-assured.version>4.3.3</rest-assured.version>
             </properties>
          
             <dependencies>
                 <dependency>
                     <groupId>org.springframework.boot</groupId>
                     <artifactId>spring-boot-starter</artifactId>
                 </dependency>
                 <dependency>
                     <groupId>org.springframework.boot</groupId>
                     <artifactId>spring-boot-starter-test</artifactId>
                     <scope>test</scope>
                 </dependency>
                 <dependency>
                     <groupId>io.rest-assured</groupId>
                     <artifactId>spring-mock-mvc</artifactId>
                     <scope>test</scope>
                     <exclusions>
                         <exclusion>
                             <artifactId>groovy</artifactId>
                             <groupId>org.codehaus.groovy</groupId>
                         </exclusion>
                     </exclusions>
                 </dependency>
                 <dependency>
                     <groupId>org.codehaus.groovy</groupId>
                     <artifactId>groovy</artifactId>
                     <version>${groovy.version}</version>
                 </dependency>
                 <dependency>
                     <groupId>org.codehaus.groovy</groupId>
                     <artifactId>groovy-xml</artifactId>
                     <version>${groovy.version}</version>
                 </dependency>
                 <dependency>
                     <groupId>org.codehaus.groovy</groupId>
                     <artifactId>groovy-json</artifactId>
                     <version>${groovy.version}</version>
                 </dependency>
                 <dependency>
                     <groupId>io.rest-assured</groupId>
                     <artifactId>json-path</artifactId>
                     <version>${rest-assured.version}</version>
                     <scope>test</scope>
                 </dependency>
                 <dependency>
                     <groupId>io.rest-assured</groupId>
                     <artifactId>xml-path</artifactId>
                     <version>${rest-assured.version}</version>
                     <scope>test</scope>
                 </dependency>
             </dependencies>
          

          【讨论】:

            猜你喜欢
            • 2020-10-03
            • 1970-01-01
            • 2020-04-02
            • 2021-04-09
            • 2013-04-02
            • 2021-05-22
            • 1970-01-01
            • 1970-01-01
            • 2018-01-05
            相关资源
            最近更新 更多