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

Wrong classpath with Gradle `compileOnly` like instructions

Open pierrickrouxel opened this issue 10 months ago • 2 comments

We need to use the compileOnly in a gradle modules. The expected behaviour is to have the dependency available at the compile time, but not at runtimes.

It's useful to create spring boot auto-configurations that load only if the dependency is present in the consumer module.

We have this declaration in a library:

dependencies {
  compileOnly 'org.springframework.boot:spring-boot-starter-security'
}

In the application module we have this declaration:

dependencies {
  implementation project(':libs:my-lib')
}

Running the following command, the project works as expected. The spring-boot-starter-security is not loaded.

./gradlew bootRun

But if we run the following configuration, the dependency is in classpath at runtime and the auto-configuration is applied at wrong.

{
  "configurations": [
    {
      "type": "java",
      "name": "Spring Boot-Application",
      "request": "launch",
      "cwd": "${workspaceFolder}",
      "mainClass": "com.mycompany.Application",
      "projectName": "application",
      "args": ""
    }
  ]
}

There is also dependency problems in test but I can't exactly explain what. There is some BeanDefinitionOverrideException that are not present running the ./gradlew test command.

pierrickrouxel avatar Jan 28 '25 09:01 pierrickrouxel

@pierrickrouxel You may want to take a look at

  • https://github.com/eclipse-buildship/buildship/issues/939
  • https://github.com/eclipse-buildship/buildship/issues/1120

snjeza avatar Jan 28 '25 18:01 snjeza

Thank you for your answer. Hope this problem will be fixed soon. It totally breaks Spring with gradle in vscode.

pierrickrouxel avatar Jan 29 '25 06:01 pierrickrouxel