vscode-java-test icon indicating copy to clipboard operation
vscode-java-test copied to clipboard

"Run Test with coverage" doesn't work: "Could not find or load main class"

Open LeonardoBevilacqua opened this issue 1 year ago • 15 comments

Coverage testing isn't working for me. When I run with coverage, the progress monitor spins indefinitely and no coverage information is provided. The test results are displayed correctly if I run without coverage.

I'm seeing the following error in the extension host logs:

Error: Could not find or load main class \-javaagent:c:\\\\Users\\\\myusername\\\\.vscode\\\\extensions\\\\vscjava.vscode-java-test-0.41.1\\\\server\\\\jacocoagent.jar=destfile=c:\\\\Users\\\\myusername\\\\AppData\\\\Roaming\\\\Code\\\\User\\\\workspaceStorage\\\\df684810f26c0547aff1b945ce0cc0fc\\\\vscjava.vscode-java-test\\\\my-project\\\\coverage\\\\jacoco.exec\\ Caused by: java.lang.ClassNotFoundException: \-javaagent:c:\\\\Users\\\\myusername\\\\.vscode\\\\extensions\\\\vscjava.vscode-java-test-0.41.1\\\\server\\\\jacocoagent.jar=destfile=c:\\\\Users\\\\myusername\\\\AppData\\\\Roaming\\\\Code\\\\User\\\\workspaceStorage\\\\df684810f26c0547aff1b945ce0cc0fc\\\\vscjava.vscode-java-test\\\\my-project\\\\coverage\\\\jacoco.exec\\

vscode-java-test Extension version: 0.41.1 VS Code Version: Version: 1.91.1 Commit: f1e16e1e6214d7c44d078b1f0607b2388f29d729 Electron: 29.4.0 ElectronBuildId: 9728852 Chromium: 122.0.6261.156 Node.js: 20.9.0 V8: 12.2.281.27-electron.0 OS: Windows_NT x64 10.0.19045

LeonardoBevilacqua avatar Jul 24 '24 17:07 LeonardoBevilacqua

Is there any error log in the server log? (Trigger Java: Open Java Language Server Log File)

Is it possible to share a sample project to us?

jdneo avatar Jul 25 '24 01:07 jdneo

Here is the log

!ENTRY org.eclipse.jdt.ls.core 4 2 2024-07-25 09:13:51.207
!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.jdt.ls.core".
!STACK 0
java.io.FileNotFoundException: c:\Users\myusername\AppData\Roaming\Code\User\workspaceStorage\df684810f26c0547aff1b945ce0cc0fc\vscjava.vscode-java-test\my-project\coverage\jacoco.exec (The system cannot find the path specified)
	at java.base/java.io.FileInputStream.open0(Native Method)
	at java.base/java.io.FileInputStream.open(Unknown Source)
	at java.base/java.io.FileInputStream.<init>(Unknown Source)
	at org.jacoco.core.tools.ExecFileLoader.load(ExecFileLoader.java:72)
	at com.microsoft.java.test.plugin.coverage.CoverageHandler.getCoverageDetail(CoverageHandler.java:82)
	at com.microsoft.java.test.plugin.handler.TestDelegateCommandHandler.executeCommand(TestDelegateCommandHandler.java:85)
	at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceExecuteCommandHandler$1.run(WorkspaceExecuteCommandHandler.java:230)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceExecuteCommandHandler.executeCommand(WorkspaceExecuteCommandHandler.java:220)
	at org.eclipse.jdt.ls.core.internal.handlers.JDTLanguageServer.lambda$4(JDTLanguageServer.java:604)
	at org.eclipse.jdt.ls.core.internal.BaseJDTLanguageServer.lambda$0(BaseJDTLanguageServer.java:87)
	at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(Unknown Source)
	at java.base/java.util.concurrent.CompletableFuture$Completion.exec(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinPool.scan(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)

!ENTRY org.eclipse.jdt.ls.core 4 0 2024-07-25 09:13:51.208
!MESSAGE Error in calling delegate command handler
!STACK 0
java.io.FileNotFoundException: c:\Users\myusername\AppData\Roaming\Code\User\workspaceStorage\df684810f26c0547aff1b945ce0cc0fc\vscjava.vscode-java-test\my-project\coverage\jacoco.exec (The system cannot find the path specified)
	at java.base/java.io.FileInputStream.open0(Native Method)
	at java.base/java.io.FileInputStream.open(Unknown Source)
	at java.base/java.io.FileInputStream.<init>(Unknown Source)
	at org.jacoco.core.tools.ExecFileLoader.load(ExecFileLoader.java:72)
	at com.microsoft.java.test.plugin.coverage.CoverageHandler.getCoverageDetail(CoverageHandler.java:82)
	at com.microsoft.java.test.plugin.handler.TestDelegateCommandHandler.executeCommand(TestDelegateCommandHandler.java:85)
	at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceExecuteCommandHandler$1.run(WorkspaceExecuteCommandHandler.java:230)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceExecuteCommandHandler.executeCommand(WorkspaceExecuteCommandHandler.java:220)
	at org.eclipse.jdt.ls.core.internal.handlers.JDTLanguageServer.lambda$4(JDTLanguageServer.java:604)
	at org.eclipse.jdt.ls.core.internal.BaseJDTLanguageServer.lambda$0(BaseJDTLanguageServer.java:87)
	at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(Unknown Source)
	at java.base/java.util.concurrent.CompletableFuture$Completion.exec(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinPool.scan(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)

unfortunately, I cannot share a sample of the project.

Additional notes: I used to run the code in another IDE without any problem, recently tried in VSCode with the JAVA Pack extension. Everything worked fine out of the box, running, debugging and testing without issues, only the coverage action doesn't work, but I can run the mvn command to generate the report.

LeonardoBevilacqua avatar Jul 25 '24 12:07 LeonardoBevilacqua

@LeonardoBevilacqua Is this still a problem in 0.42.0?

jdneo avatar Aug 01 '24 08:08 jdneo

Yes, the still a problem

LeonardoBevilacqua avatar Aug 05 '24 14:08 LeonardoBevilacqua

What's the jacoco version used in your project?

jdneo avatar Aug 06 '24 01:08 jdneo

I'm guessing that this might be caused by the version of jacoco agent of the project is different from the embedded one in extension.

In https://github.com/microsoft/vscode-java-test/pull/1723, I changed to implementation that using the one from project if it's available.

Would you mind trying the pre-release 0.42.2024080609 and let me know if the issue is fixed or not?

jdneo avatar Aug 07 '24 12:08 jdneo

I've tried the pre-release version, still does not work. I believe the jacoco version is 0.8.10, (not managed by my current project)

Edit: I tried with 2 projects, both with the same issue

LeonardoBevilacqua avatar Aug 07 '24 13:08 LeonardoBevilacqua

Hello. I was facing this problem too. As recomended by @jdneo I've tried the pre-release 0.42.2024080609 and the problem still persist.

Here we use an internal and "non-sense" framework wich brings jacoco 0.8.8 . I've update the current project to force to bring recent version of jacoco 0.8.12.

I could find a workaround copying the jacoco.exec of the current project found it in your-current-application>target>jacoco.exec to the folder where vscode complains about ClassNotFoundException on your case "-javaagent:c:\\Users\\myusername\\.vscode\\extensions\\vscjava.vscode-java-test-0.41.1\\server\\jacocoagent.jar=destfile=c:\\Users\\myusername\\AppData\\Roaming\\Code\\User\\workspaceStorage\\df684810f26c0547aff1b945ce0cc0fc\\vscjava.vscode-java-test\\my-project\\coverage\\jacoco.exec\"

As @jdneo points out. Its something with conflict version.

Anyway thanks. I love to work with the vscode.

LoveraSantiago avatar Sep 09 '24 18:09 LoveraSantiago

@LoveraSantiago Would you mind sharing the project that having this issue?

jdneo avatar Sep 10 '24 01:09 jdneo

Same here, just I cannot share so much of this project :S

When I run a test with coverage I receive this error:


Error: Could not find or load main class \-javaagent:c:\\\\Users\\\\michele.dimaria\\\\.vscode\\\\extensions\\\\vscjava.vscode-java-test-0.42.0\\\\server\\\\jacocoagent.jar=destfile=c:\\\\Users\\\\michele.dimaria\\\\AppData\\\\Roaming\\\\Code\\\\User\\\\workspaceStorage\\\\dff81ef8239cb1c05fbfcd6bbde7cebc\\\\vscjava.vscode-java-test\\\\uibm-persistance-importer\\\\coverage\\\\jacoco.exec\\
Caused by: java.lang.ClassNotFoundException: \-javaagent:c:\\\\Users\\\\michele.dimaria\\\\.vscode\\\\extensions\\\\vscjava.vscode-java-test-0.42.0\\\\server\\\\jacocoagent.jar=destfile=c:\\\\Users\\\\michele.dimaria\\\\AppData\\\\Roaming\\\\Code\\\\User\\\\workspaceStorage\\\\dff81ef8239cb1c05fbfcd6bbde7cebc\\\\vscjava.vscode-java-test\\\\uibm-persistance-importer\\\\coverage\\\\jacoco.exec\\

mdima avatar Nov 04 '24 09:11 mdima

Same issue here with version 0.43.0. !ENTRY org.eclipse.jdt.ls.core 4 2 2024-11-28 19:33:31.931 !MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.jdt.ls.core". !STACK 0 java.io.FileNotFoundException: c:\Users\Guille\AppData\Roaming\Code\User\workspaceStorage\9f172f0711175a75b35aa3050c275a0c\vscjava.vscode-java-test\service\coverage\jacoco.exec (The system cannot find the path specified) at java.base/java.io.FileInputStream.open0(Native Method) at java.base/java.io.FileInputStream.open(Unknown Source) at java.base/java.io.FileInputStream.(Unknown Source) at org.jacoco.core.tools.ExecFileLoader.load(ExecFileLoader.java:72) at com.microsoft.java.test.plugin.coverage.CoverageHandler.getCoverageDetail(CoverageHandler.java:82) at com.microsoft.java.test.plugin.handler.TestDelegateCommandHandler.executeCommand(TestDelegateCommandHandler.java:85) at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceExecuteCommandHandler$1.run(WorkspaceExecuteCommandHandler.java:230) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47) at org.eclipse.jdt.ls.core.internal.handlers.WorkspaceExecuteCommandHandler.executeCommand(WorkspaceExecuteCommandHandler.java:220) at org.eclipse.jdt.ls.core.internal.handlers.JDTLanguageServer.lambda$4(JDTLanguageServer.java:610) at org.eclipse.jdt.ls.core.internal.BaseJDTLanguageServer.lambda$0(BaseJDTLanguageServer.java:87) at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(Unknown Source) at java.base/java.util.concurrent.CompletableFuture$Completion.exec(Unknown Source) at java.base/java.util.concurrent.ForkJoinTask.doExec(Unknown Source) at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(Unknown Source) at java.base/java.util.concurrent.ForkJoinPool.scan(Unknown Source) at java.base/java.util.concurrent.ForkJoinPool.runWorker(Unknown Source) at java.base/java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)

This is on a freshly installed Windows 11 Pro machine. I have the same issue on a different Windows 11 Pro laptop but not on a MacBook Air, always on the exact same project.

The issue on Windows affects all the projects I tried.

I cannot share files but I can run tests if it helps.

sansovic avatar Nov 28 '24 23:11 sansovic

It didn't work in my environment either, but I removed the double quotation marks on line 75 of src/utils/launchUtils.ts and loaded the vsix I made with it and it worked.

YuyaYokoyama8864 avatar Dec 24 '24 08:12 YuyaYokoyama8864

It didn't work in my environment either, but I removed the double quotation marks on line 75 of src/utils/launchUtils.ts and loaded the vsix I made with it and it worked.

That was it. Thank you so much!

sansovic avatar Dec 24 '24 10:12 sansovic

thanks @YuyaYokoyama8864 .

  1. download .vsix file
  2. unzip it
  3. open extension/dist/extension.bundle.js
  4. replace "win32"===o.platform()&&(e=`"${e}"`)
    to "win32"===o.platform()&&(e=`${e}`) (remove double quotation)
  5. zip and change extension to .vsix
  6. install edited vsix
  7. it works for me

leafriend avatar Jan 17 '25 03:01 leafriend

Hi @LeonardoBevilacqua, I'm an AI Support assistant here to help with your issue. While the team reviews your request, I wanted to provide some possible tips and documentation that might help you in the meantime.

Suggestions:

  • Workaround by launching tests in debug mode with Jacoco agent manually:

    // .vscode/launch.json
    {
      "version": "0.2.0",
      "configurations": [
        {
          "type": "java",
          "name": "Debug Tests with Coverage",
          "request": "launch",
          "mainClass": "org.junit.platform.console.ConsoleLauncher",
          "vmArgs": "-javaagent:${extensionPath}/vscjava.vscode-java-test/server/jacocoagent.jar=destfile=${workspaceFolder}/coverage/jacoco.exec",
          "args": "-cp ${workspaceFolder}/target/test-classes org.junit.platform.console.ConsoleLauncher --scan-classpath"
        }
      ]
    }
    

    This uses the vmArgs setting from Debugger for Java extension to attach the agent. (see: https://github.com/microsoft/vscode-java-pack/issues/312)

  • Upgrade to the latest Java Test Runner extension. A similar argument‐parsing bug was reported in the Debugger for Java and has been addressed in newer versions: https://github.com/redhat-developer/vscode-java/issues/1312

  • Enable verbose logging to gather more details:

    "java.test.logLevel": "verbose"
    

If the above does not help, please file an issue at https://github.com/microsoft/vscode-java-test/issues with the java.test.logLevel output and your launch.json/project setup.

Other references with low confidence
  • Error when running main in Java extension (unrelated to coverage): https://github.com/redhat-developer/vscode-java/issues/1085

The team will respond to your issue shortly. I hope these suggestions are helpful in the meantime. If this comment helped you, please give it a 👍. If the suggestion was not helpful or incorrect, please give it a 👎. Your feedback helps us improve!

github-actions[bot] avatar Nov 12 '25 21:11 github-actions[bot]