【问题标题】:Caused by: java.lang.ExceptionInInitializerError Caused by: java.lang.RuntimeException引起:java.lang.ExceptionInInitializerError 引起:java.lang.RuntimeException
【发布时间】:2023-04-09 02:34:01
【问题描述】:

在 Gradle 中运行 JUnitTest 任务时,出现以下错误。我发现的根本原因是DaoConfig.java 无法解析与DaoConfig.java 位于同一文件夹中的资源文件dao.xml 的路径。当我从 Eclipse IDE 运行 Junit 测试时,我没有收到任何类似的错误。我能够成功执行测试。

`

java.lang.Exception: Unexpected exception, expected<com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException> but was<java.lang.ExceptionInInitializerError>
    at org.junit.internal.runners.statements.ExpectException.evaluate(ExpectException.java:28)
    at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:239)
    at org.junit.rules.RunRules.evaluate(RunRules.java:20)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
    at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
    at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
    at com.sun.proxy.$Proxy3.processTestClass(Unknown Source)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:147)
    at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:129)
    at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ExceptionInInitializerError
    at com.ibatis.jpetstore.service.AccountService.<init>(AccountService.java:27)
    at com.ibatis.jpetstore.service.AccountService.<clinit>(AccountService.java:15)
    at test.java.unitTest.onInsert(unitTest.java:48)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.internal.runners.statements.ExpectException.evaluate(ExpectException.java:19)
    ... 39 more
Caused by: java.lang.RuntimeException: Could not initialize DaoConfig.  Cause: java.io.IOException: Could not find resource C:\Users\wada\Documents\jpetstore_cd\src\com\ibatis\jpetstore\persistence\dao.xml
    at com.ibatis.jpetstore.persistence.DaoConfig.<clinit>(DaoConfig.java:21)
    ... 51 more

` 提前致谢!

【问题讨论】:

  • 你说 "same folder as DaoConfig.java",但由于我们不知道那个文件夹在哪里,这个声明对我们来说毫无意义。问题真的是:文件C:\Users\wada\Documents\jpetstore_cd\src\com\ibatis\jpetstore\persistence\dao.xml 存在吗?
  • 是的,它确实存在于指定路径

标签: java gradle


【解决方案1】:

Gradle 区分源和资源。默认情况下,源位于 src/main/java 下,资源位于 src/main/resources 下。在构建 Gradle 时,从源创建类文件并将其放在 build/classes 下,并将资源的内容复制到 build/resources。执行测试时,资源被镜像到类路径中。它通常不做的是从源目录复制文件。我猜你的 xml 文件放在源代码中,Gradle 认为不需要复制它。在没有更多信息的情况下,只能说这些。

【讨论】:

  • 我们已经设置了sourceSets.main.resources.srcDirs 'src/com/ibatis/resources' 和 gradle 运行时正在构建包含所有必需资源的 build/resources 文件夹,但问题仍然存在
猜你喜欢
  • 1970-01-01
  • 2018-12-11
  • 2019-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多