redhat-developer / redhat-developer/vscode-java

NoClassDefFoundError when running test inside a multi-project workspace

Offen
#1,031 4 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

compile
Vorherrschende Sprache
TypeScript
Sterne
2.3k
Forks
546
Ø Merge
20 Std. 1 Min.
Gemergte PRs (30 T.)
11

Beschreibung

When executing an unit test of Project A, the test failed due to a missing Java class definition from Project B.

Environment
  • Operating System: RedHat Linux 7.6
  • JDK version: RedHat OpenJDK 8 u212
  • Visual Studio Code version: 1.37.0
  • Java extension version: 0.47.0
Steps To Reproduce
  1. Run test001 of ServiceTestA in Project A

sample-projects.zip

Current Result
Message:
projectb/ServiceB
Stack trace:
java.lang.NoClassDefFoundError: projectb/ServiceB
	at java.lang.Class.getDeclaredMethods0(Native Method)
	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
	at java.lang.Class.getDeclaredMethods(Class.java:1975)
	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:613)
	at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:524)
	at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:510)
	at org.springframework.util.ReflectionUtils.getUniqueDeclaredMethods(ReflectionUtils.java:570)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryMethod(AbstractAutowireCapableBeanFactory.java:697)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:640)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:609)
	at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1490)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:425)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:395)
	at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:96)
	at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:687)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:525)
	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
	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.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
	at com.microsoft.java.test.runner.junit4.JUnit4TestReference.run(JUnit4TestReference.java:50)
	at com.microsoft.java.test.runner.junit4.CustomizedJUnit4CoreRunner.run(CustomizedJUnit4CoreRunner.java:45)
	at com.microsoft.java.test.runner.junit4.JUnit4Launcher.execute(JUnit4Launcher.java:30)
	at com.microsoft.java.test.runner.Launcher.main(Launcher.java:56)
Caused by: java.lang.ClassNotFoundException: projectb.ServiceB
	at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 43 more
Expected Result

The test should be passed.

Additional Informations

After checking log, it was found that the Language Server failed to include classes from workspace dependencies into the class path.

[Trace - 2:44:38 PM] Sending request 'workspace/executeCommand - (9)'.
Params: {
    "command": "vscode.java.test.runtime.classpath",
    "arguments": [
        [
            "/app/home/ronaldlee/files/gitrepo-openjdk/project-a/src/test/java/projecta/ServiceATest.java"
        ]
    ]
}


[Trace - 2:44:38 PM] Received response 'workspace/executeCommand - (9)' in 88ms.
Result: [
    "/app/home/ronaldlee/files/gitrepo-openjdk/project-a/target/test-classes",
    "/app/home/ronaldlee/files/gitrepo-openjdk/project-a/target/classes",
    "/app/home/ronaldlee/.m2/repository_openjdk/junit/junit/4.12/junit-4.12.jar",
    "/app/home/ronaldlee/.m2/repository_openjdk/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar",
    "/app/home/ronaldlee/.m2/repository_openjdk/org/springframework/spring-test/4.3.7.RELEASE/spring-test-4.3.7.RELEASE.jar",
    "/app/home/ronaldlee/.m2/repository_openjdk/org/springframework/spring-core/4.3.7.RELEASE/spring-core-4.3.7.RELEASE.jar",
    "/app/home/ronaldlee/.m2/repository_openjdk/commons-logging/commons-logging/1.2/commons-logging-1.2.jar",
    "/app/home/ronaldlee/.m2/repository_openjdk/org/springframework/spring-context/4.3.16.RELEASE/spring-context-4.3.16.RELEASE.jar",
    "/app/home/ronaldlee/.m2/repository_openjdk/org/springframework/spring-beans/4.3.16.RELEASE/spring-beans-4.3.16.RELEASE.jar",
    "/app/home/ronaldlee/.m2/repository_openjdk/org/springframework/spring-expression/4.3.16.RELEASE/spring-expression-4.3.16.RELEASE.jar",
    "/app/home/ronaldlee/.m2/repository_openjdk/org/springframework/spring-aop/4.3.16.RELEASE/spring-aop-4.3.16.RELEASE.jar",
    "/app/home/ronaldlee/.m2/repository_openjdk/org/springframework/spring-webmvc/4.3.16.RELEASE/spring-webmvc-4.3.16.RELEASE.jar",
    "/app/home/ronaldlee/.m2/repository_openjdk/org/springframework/spring-web/4.3.16.RELEASE/spring-web-4.3.16.RELEASE.jar",
    "/app/home/ronaldlee/.m2/repository_openjdk/org/springframework/spring-orm/4.3.16.RELEASE/spring-orm-4.3.16.RELEASE.jar",
    "/app/home/ronaldlee/.m2/repository_openjdk/org/springframework/spring-jdbc/4.3.16.RELEASE/spring-jdbc-4.3.16.RELEASE.jar",
    "/app/home/ronaldlee/.m2/repository_openjdk/org/springframework/spring-tx/4.3.16.RELEASE/spring-tx-4.3.16.RELEASE.jar"

    // the following path is expected
    // "/app/home/ronaldlee/files/gitrepo-openjdk/project-b/target/classes"
]

If the classifier of dependency is not specified, class path is constructed correctly.

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne mit der workspace/executeCommand-Anfrage für vscode.java.test.runtime.classpath und reproduziere das Problem anhand des verknüpften Multi-Projekt-Beispiels mit test001 in ServiceTestA. Vergleiche den zurückgegebenen Classpath, wenn der Dependency-Klassifizierer angegeben ist, und überprüfe, dass project-b/target/classes enthalten ist, damit der Test erfolgreich ist.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
java, vscode
Bereich
devtools, testing-qa
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
38/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.