2015-03-27 13 views
5

Ich weiß, diese Frage wurde in verschiedenen Formen vor, aber ich habe alle Antworten überprüft und ich denke, wir haben sie alle ausgeschlossen.IntelliJ NoClassDefFoundError beim Ausführen von IntelliJ Tests

Fehler:

java.lang.NoClassDefFoundError: com/lgc/infra/geometry/Coord1Val 
at com.lgc.infra.geometry.Coords.coord(Coords.java:89) 
at com.lgc.infra.geometry.Coords.<clinit>(Coords.java:24) 
at com.geoteric.lfd.eos.ReallyBasicTest.make_a_simple_coord(ReallyBasicTest.java:17) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) 
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 
at org.junit.runners.Suite.runChild(Suite.java:128) 
at org.junit.runners.Suite.runChild(Suite.java:24) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 
at org.junit.runner.JUnitCore.run(JUnitCore.java:157) 
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:78) 
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:212) 
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:68) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140) 
Caused by: java.lang.ClassNotFoundException: com.lgc.infra.geometry.Coord1Val 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    ... 37 more 

Code:

package com.geoteric.lfd.eos; 

import com.lgc.infra.geometry.Coord3; 
import com.lgc.infra.geometry.Coords; 
import org.junit.Test; 

import static org.hamcrest.CoreMatchers.equalTo; 
import static org.junit.Assert.assertThat; 

/** 
* Created by TClarke on 27/03/2015. 
*/ 
public class ReallyBasicTest { 
    @Test 
    public void make_a_simple_coord() 
    { 
     Coord3 c3 = Coords.coord(1.0f, 2.0f, 3.0f); 
     assertThat(c3.getX(), equalTo(1.0)); 
    } 
} 

Weg zum Klassendatei:

D:\ffa_dev\link-for-decisionspace\ext\dssdk\com_lgc_dsp-core_sdk.jar!\com\lgc\infra\geometry\Coords.class 

Screenshot von Strukturmodul:

Screenshots von Test-Runner Config:

zugehörigen Code Funktionen in Ordnung, wenn in reales Projekt gebaut. Also, irgendwelche Ratschläge, was ich verpasst haben könnte?

Antwort

0

Ich denke, dass Ihre .IML nicht aktualisiert wird. Haben Sie versucht, Ihre Projekt/Modul .iml-Dateien zu erstellen. Wenn sein Maven Projekt können Sie es mit dem Befehl neu

mvn idea:idea 

Nach .iml aktualisiert wird, um das Projekt zu aktualisieren und erneut den Test

1

Dies wurde upvoted laufen, also werde ich Sie wissen lassen, was schließlich arbeiteten wir heraus .

Wir haben ein Plugin mit der API für eine andere Anwendung geschrieben. Wenn Sie das Plug-in bereitstellen, erhält es Zugriff auf alle Definitionen in der Anwendung. Die Komponententests werden jedoch isoliert ausgeführt, sodass bestimmte Klassen, die nur über Schnittstellen und Factorys definiert sind, nicht erstellt werden können.

Für dieses Beispiel:

Coord3 c3 = Coords.coord(1.0f, 2.0f, 3.0f); 

Sowohl Coord3 und Coords definiert sind. Aber com/lgc/infra/geometry/Coord1Val, das in Coords verwendet wird, ist nie wirklich in unserem Bibliothekspfad definiert (das API-Jar wurde dort eindeutig erstellt, aber es wurde nicht mitgeliefert).

Es gibt mehrere mögliche Problemumgehungen, hoffentlich werden kluge Leute, die über diese Frage stolpern, einige davon kommentieren. Wir gingen mit Coords in eine vorstellbare Fabrik, die einen Schein (Coord3.class) zurückgibt, so dass die Teile, die dieses Problem demonstrieren, gekapselt sind.

Verwandte Themen