Ich erhalte eine ClassNotFoundException
mit Class.forName()
übergibt den voll qualifizierten Namen einer öffentlichen statischen Klasse, die im selben Paket lebt. Dies ist, wenn ich meine Tests durchführe.ClassNotFoundException auf der statischen inneren Klasse
Hier ist der vollständige Stacktrace:
java.lang.AssertionError
at org.junit.Assert.fail(Assert.java:86)
at org.junit.Assert.assertTrue(Assert.java:41)
at org.junit.Assert.assertNotNull(Assert.java:712)
at org.junit.Assert.assertNotNull(Assert.java:722)
at com.badlogic.ashley.serialization.EntitySerializerTests.read(EntitySerializerTests.java:63)
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:483)
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.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.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
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.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:119)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74)
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:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
In EntitySerializerTests.java
in meinem tests
Ordner.
package com.badlogic.ashley.serialization;
public class EntitySerializerTests {
public static class TestComponentA implements Component {
public int value;
}
...
}
In meiner Bibliothek Code
package com.badlogic.ashley.serialization;
public class EntitySerializer implements Json.Serializer<Entity> {
...
private Component read(Json json, JsonValue componentValue) throws ClassNotFoundException {
String className = componentValue.name();
Class componentType = Class.forName(className); // THROWS
...
}
}
Die Ausnahmemeldung ist:
java.lang.ClassNotFoundException: com.badlogic.ashley.serialization.EntitySerializerTests.TestComponentA
Bibliothek Code versucht, die Class
der Name für eine Klasse gegeben zu erhalten, die in einer Testdatei definiert ist . Ist das erlaubt? Ich würde annehmen, dass zur Laufzeit alle diese Klassen im Klassenpfad verfügbar sind.
Danke.
Warum wurde das heruntergeregelt? Kann ich wenigstens einen Grund dafür bekommen? –
Ich habe nicht downvote, aber Sie sollten IMMER die vollständige Stack-Ablaufverfolgung der Ausnahme veröffentlichen, wenn Sie nach einer Ausnahme fragen. Es ist auch nicht klar, ob Sie einen Test oder einen Produktionscode ausführen. Der Stack-Trace würde helfen, das herauszufinden. Wenn Sie Produktionscode ausführen, warum sollten die Testklassen im Klassenpfad sein? –
@JBNizet danke für die Hilfe bei der Verbesserung meiner Frage. Ich habe geklärt, dass dies passiert, wenn Tests ausgeführt und mit dem vollständigen Stacktrace verknüpft werden. –