Search code examples
javaspringspring-bootjerseyhk2

Transitive Dependency Errors When Upgrading Spring Boot To 2.1.1


I am trying to upgrade spring boot to the latest version 2.1.1. My java ee based web application uses spring framework, jersey and hk2 libraries too. Identifying the dependency versions from the spring boot pom.xml we could see that it depends on spring framework 5.1.3 and jersey 2.27. Jersey libraries depend on hk2 libraries - namely org.glassfish.hk2.external:javax.inject. Below are the jersey and hk2 libraries that our application uses

Jersey libraries
    1. org.glassfish.jersey.core:jersey-server
    2. org.glassfish.jersey.containers:jersey-container-servlet-core
    3. org.glassfish.jersey.core:jersey-client
    4. org.glassfish.jersey.core:jersey-common
    5. org.glassfish.jersey.bundles.repackaged:jersey-guava
    6. org.glassfish.jersey.ext:jersey-spring3
    7. org.glassfish.jersey.containers:jersey-container-servlet
    8. org.glassfish.jersey.media:jersey-media-jaxb
    9. org.glassfish.jersey.media:jersey-media-json-jackson
    10. org.glassfish.jersey.ext:jersey-entity-filtering
HK2 libraries
    1. org.glassfish.hk2:spring-bridge
    2. org.glassfish.hk2:hk2-api
    3. org.glassfish.hk2:hk2-utils
    4. org.glassfish.hk2:hk2-locator
    5. org.glassfish.hk2.external:javax.inject
    6. org.glassfish.hk2.external:aopalliance-repackaged

Most of the jersey libraries are at version 2.27 except the two libraries - org.glassfish.jersey.bundles.repackaged:jersey-guava & org.glassfish.jersey.ext:jersey-spring3. Their latest version is 2.25.1.

For hk2 (org.glassfish.hk2.external:javax.inject), the latest version is 2.4.0.

  1. How should we go about resolving the above dependency issues? For jersey, should we use the latest version i.e. 2.27 and for the non-existing ones we use their respective versions. Would that cause any issues?
  2. Are there any best practices recommended for such situations?

I understand that we could rely on tests but I am trying to see if we could identify issues upfront.


Solution

  • The resolution was to use jersey-spring4 dependency and remove the dependency to jersey-guava.