redhat-developer / redhat-developer/vscode-java
NoClassDefFoundError when running test inside a multi-project workspace
Personne n'a encore pris cette issue.
- Langage dominant
- TypeScript
- Étoiles
- 2.3k
- Forks
- 546
- Merge moyen
- 20 h 1 min
- PR mergées (30 j)
- 11
Description
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
- Run
test001of ServiceTestA in Project A
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.
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par la requête workspace/executeCommand pour vscode.java.test.runtime.classpath et reproduisez le problème à l’aide de l’exemple multi-projet lié avec test001 dans ServiceTestA. Comparez le classpath renvoyé lorsque le classifier de la dépendance est spécifié, et vérifiez que project-b/target/classes est inclus afin que le test réussisse.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- java, vscode
- Domaine
- devtools, testing-qa
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 38/100