提问者:小点点

java. lang.IllegalAccessError使Spring Data repo包本地时


我正在尝试按功能使用包(就像这里所做的那样)。我用我的UserRepositoryUserService接口创建了一个com.company. project.user包,只使UserService公开。我还有一个子包web,其中包含UserControllerUserDto

在这个web包中,我有一个测试:

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureJsonTesters
public class UserDtoTest {

    private JacksonTester<UserDto> tester;

    @Test
    public void testSerialize() throws IOException {
        String id = UUID.fromString("939d1c2f-b1f4-49c6-9839-f088401f6781").toString();
        String username = "wim.deblauwe";
        UserRole role = UserRole.ADMIN;
        JsonContent<UserDto> content = tester.write(new UserDto(id, username, role));
        assertThat(content).isEqualToJson("userdto.json");
    }
}

这使用Spring Boot 1.4.0。M3。当我单独运行它或在IntelliJ中运行它时,这个测试运行良好。但是,当我从Maven(版本3.3.9)运行它时,我遇到了这个问题:

$Proxy169无法访问其超接口com.company. project.user.UserRepository

堆栈跟踪的更大部分:

为了让它在Maven中也能工作,我只需要改变:

interface UserRepository extends CrudRepository<User, UserId>, UserRepositoryCustom {
    Optional<User> findByUsername(String username);
}

public interface UserRepository extends CrudRepository<User, UserId>, UserRepositoryCustom {
    Optional<User> findByUsername(String username);
}

知道我为什么需要这样做吗?这可能是Spring Data的bug吗?


共1个答案

匿名用户

这是由Spring Boot中的bug引起的。有几个解决方法:

  1. 标记任何使用Web环境的测试。RANDOM_PORTWeb环境。DEFINED_PORTwith@DirtiesContext.
  2. 切换到Undertow或Jetty。