scalacenter / bloop

Bloop is a build server and CLI tool to compile, test and run Scala fast from any editor or build tool.
https://scalacenter.github.io/bloop/
Apache License 2.0
906 stars 202 forks source link

Java modules are not handled properly #2080

Open tgodzik opened 1 year ago

tgodzik commented 1 year ago

Copied from https://github.com/scalameta/metals/issues/4847

Describe the bug Actually, I was trying to create a sample project, for a more complicated bug, but then I noticed that my "minimal project" doesn't seem to work without any changes

https://github.com/JPro-one/HelloJPro.

Screenshot 2023-01-11 at 22 21 58

This is a pure Java project. The question is, is that supposed to work? I'm asking because Metals it's a scala language server.

When I look into my other projects, the Java parts sometimes work with Metals/Bloop, and sometimes not. But Metals/Bloop is always trying to compile it, so I guess it's in the scope of the project. So, I thought I start by posting the most simple case as a bug report.

If you wonder why I post this, I usually have a lot of mixed Scala/Java projects.

Expected behavior No response

Operating system macOS

Editor/Extension None

Version of Metals v1.21.0

Extra context or search terms No response

FlorianKirmaier commented 9 months ago

I was playing around with it again, and this is the main issue that stops me from using VisualCode. I have many mixed Java/Scala projects, and the latest IntelliJ Version is becoming increasingly unstable.

solution? It seems like many of the problems can be solved by just using --module-path instead of -cp when a module-info.java exists. This would probably make most modern projects compile - maybe after fixing a dependency that doesn't work as a module yet.

help I would like to invest some time to make this work - if someone can guide me on how to do so. Is there a way to find out the javac command used when running bloop compile <project>? With some help I might even be able to make a PR fo this.

tgodzik commented 9 months ago

I haven't found time to work on it unfortunately, so I would be glad to get some help. The part dealing with the Java Compiler is actually not that hard. Take a look at:

https://github.com/scalacenter/bloop/blob/d83c2ef256787f2ada598dc8cd1fc0e78b04def0/backend/src/main/scala/bloop/CompilerCache.scala#L151

And if you would need to write tests you could probably use the examples in https://github.com/scalacenter/bloop/blob/d83c2ef256787f2ada598dc8cd1fc0e78b04def0/frontend/src/test/scala/bloop/BaseCompileSpec.scala#L448

Though not sure if those tests would be enough, you can also use sbt project such as the ones in https://github.com/scalacenter/bloop/tree/main/frontend/src/test/resources

You should be able to use the like in https://github.com/scalacenter/bloop/blob/d83c2ef256787f2ada598dc8cd1fc0e78b04def0/frontend/src/test/scala/bloop/bsp/BspMetalsClientSpec.scala#L506

If you need more help do let me know! Unfortunately, I don't know much around modules aside from the fact that we should deal with them better.