google / guice

Guice (pronounced 'juice') is a lightweight dependency injection framework for Java 11 and above, brought to you by Google.
https://github.com/google/guice
Apache License 2.0
12.42k stars 1.66k forks source link

Replace Guava with standard Java (where possible) #1785

Open HannesWell opened 6 months ago

HannesWell commented 6 months ago

Guava is a dependency that is often difficult to handle, mainly due to its frequent new major versions. And in some cases Guice is the main reason why a project (indirectly) requires Guava, for example Maven's core. At the same time, many of the great features and utilities of Guava have been added to the JDK, directly or indirectly.

Therefore I would like to suggest to replace the usages of Guava with standard Java wherever it is already possible in a simple way with the currently required Java-8. The ultimate goal would be one day to completely replace Guava with standard Java to get rid of it as Guice dependency. But since this is a great undertaking and I'm not even absolutely sure it is completely possible with reasonable effort and Java-8, I suggest to start with small steps and see how far we can get. If it is not feasible to replace Guava completely and e.g. features of more recent Java versions are required, it would at least be less work in the future if it is feasible one day.

I can work on this, but would like to know in advance if the Guice team is interested in such changes?

HannesWell commented 6 months ago

As a first example I have created https://github.com/google/guice/pull/1786.

HannesWell commented 6 months ago

One difficulty I already encountered is that currently Guava's Optional are also supported as a backwards compatible alternative for java.util.Optional bindings in RealOptionalBinder. But I think this can be solved with some reflection magic or by refactoring the Guava Optional part into a separate/inner class and catching the NoClassDefFoundErrors if the class is absent at runtime so that Guava can at least become an optional dependency.

HannesWell commented 5 months ago

@sameb could you please share your general assessment of this proposal and could have a look at the already existing PRs for this topic?

lobaorn commented 1 month ago

Hey @HannesWell , letting you know since you may be targeting Guice 7.0.0, about the new Micronaut Guice project, that depending on your usecase could be a useful replacement: https://github.com/micronaut-projects/micronaut-guice/issues/9