【问题标题】:java.lang.LinkageError: ClassCastException: attempting to castjarjava.lang.LinkageError: ClassCastException: 试图 castjar
【发布时间】:2021-05-06 13:37:05
【问题描述】:

我正在编写一个 JAX-RS API。

尝试运行以下单元测试时:

    @Test
    public void verifyUserTest() throws InvalidTokenException, InvalidUserException {
        Mockito.when(service.verifyLogin(Mockito.any(LoginRequestDTO.class))).thenReturn(true);
        Mockito.when(service.createToken(Mockito.any(String.class))).thenReturn("testToken");



        var res = sut.verifyUser(new LoginRequestDTO("testuser", "testpass"));
        var entity = res.getEntity();
        System.out.println(entity);

       // Assertions.assertEquals("testuser", res.getUsername());
      //  Assertions.assertEquals("testToken", res.getToken());

    }

我收到以下错误:

java.lang.LinkageError: ClassCastException: attempting to castjar:file:/C:/Users/User/.m2/repository/javax/javaee-web-api/8.0.1/javaee-web-api-8.0.1.jar!/javax/ws/rs/ext/RuntimeDelegate.class to jar:file:/C:/Users/User/.m2/repository/javax/javaee-web-api/8.0.1/javaee-web-api-8.0.1.jar!/javax/ws/rs/ext/RuntimeDelegate.class

这看起来(在我看来)同一个类被加载了两次。我将如何解决这个问题?谢谢。

【问题讨论】:

    标签: java junit jersey jax-rs


    【解决方案1】:

    我已通过更改 pom.xml 中的依赖项来解决此问题。

    两个都有

    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>3.0.2</version>
    </dependency>
    

      <dependency>
                <groupId>javax</groupId>
                <artifactId>javaee-api</artifactId>
                <version>8.0</version>
                <scope>provided</scope>
            </dependency>
    

    这种依赖组合导致了类转换错误。将 jersey-client 依赖项的版本更改为“2.34”已解决此问题。

    【讨论】:

    • 我个人使用我所有的 org.glassfish.jersey 依赖项的 2.24 版本解决了这个问题
    猜你喜欢
    • 2012-02-08
    • 2019-02-16
    • 2020-02-15
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多