我有一个 Java17 的 gradle 项目,在运行测试时出现以下错误:
java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlElement
这就是测试的样子:
public class SettingsServiceTest extends AbstractIntegrationTest {
@Autowired
private SettingsService settingsService;
@Test
void shouldReturnMandatorySetting() {
wireMockGetConfig();
String res = settingsService.getMandatorySetting();
Assertions.assertEquals(res, "setting");
}
wiremockGetConfig
方法:
protected void wireMockGetConfig() {
givenThat(get(urlPathEqualTo("/settings/appid"))
.willReturn(aResponse()
.withHeader(CONTENT_TYPE, APPLICATION_JSON_VALUE)
.withBody(readResource(SETTINGS_JSON_FILE))
.withStatus((Response.SC_OK))));
}
正如你所看到的,我试图嘲笑客户的反应。响应将是一个 json 文件。 我已经多次使用这种模式并且它总是工作得很好。最近,我们将应用程序迁移到 Java17,在查看了这个旧线程之后,我开始认为我需要配置一些东西。我在代码中没有引用 javax(我们已经迁移到 Java17)。
我已经尝试添加上述线程接受的答案中提到的依赖项:
implementation "jakarta.xml.bind:jakarta.xml.bind-api:2.3.2"
implementation "org.glassfish.jaxb:jaxb-runtime:2.3.2"
没有任何改变/成功。 我也尝试过使用 4.0.0 版本,没有区别。
还有另一个依赖项正在拉起 javax 模块。重构依赖关系解决了问题