google / guice

Guice (pronounced 'juice') is a lightweight dependency injection framework for Java 11 and above, brought to you by Google.

Home Page:https://github.com/google/guice

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Replace Guava with standard Java (where possible)

HannesWell opened this issue · comments

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?

As a first example I have created #1786.

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.

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

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: micronaut-projects/micronaut-guice#9