Skip to content

Failure to simultaneously resolve two consumers using each of v2.10.1 and v2.11.0 together in Eclipse IDE  #2725

@scottkurz

Description

@scottkurz

Gson version

v2.10.1 and v2.11.0, together in an OSGi runtime

Java / Android version

Java 21

Used tools

Eclipse IDE 2024-06 release, "Enterprise Java" package

Description

As described in eclipse-jdtls/eclipse.jdt.ls#3236 (comment)

I'm trying to load two versions of the same bundle, one which uses gson v2.10.1 and the other using gson v2.11.0.

In more detail, first, there is lsp4j v0.22.0 with
Import-Package: com.google.gson;version="[2.9.1,2.11)",com.google.gson.a nnotations;version="[2.9.1,2.11)",

(shown here as part of a bigger excerpt of the bundle MF):

Bundle-SymbolicName: org.eclipse.lsp4j
...
Export-Package: org.eclipse.lsp4j;uses:="com.google.gson.annotations,org
 .eclipse.lsp4j.adapters,org.eclipse.lsp4j.jsonrpc.messages,org.eclipse.
 lsp4j.jsonrpc.validation";version="0.22.0",org.eclipse.lsp4j.adapters;u
 ses:="com.google.gson,com.google.gson.reflect,com.google.gson.stream,or
 g.eclipse.lsp4j,org.eclipse.lsp4j.jsonrpc.messages";version="0.22.0",or
 g.eclipse.lsp4j.launch;uses:="org.eclipse.lsp4j.jsonrpc,org.eclipse.lsp
 4j.services";version="0.22.0",org.eclipse.lsp4j.services;uses:="org.ecl
 ipse.lsp4j,org.eclipse.lsp4j.adapters,org.eclipse.lsp4j.jsonrpc.json,or
 g.eclipse.lsp4j.jsonrpc.messages,org.eclipse.lsp4j.jsonrpc.services";ve
 rsion="0.22.0",org.eclipse.lsp4j.util;uses:="org.eclipse.lsp4j";version
 ="0.22.0"
Import-Package: com.google.gson;version="[2.9.1,2.11)",com.google.gson.a
 nnotations;version="[2.9.1,2.11)",com.google.gson.reflect;version="[2.9
 .1,2.11)",com.google.gson.stream;version="[2.9.1,2.11)",java.io,java.la
 ng,java.lang.invoke,java.lang.reflect,java.util,java.util.concurrent,ja
 va.util.function,org.eclipse.lsp4j,org.eclipse.lsp4j.adapters,org.eclip
 se.lsp4j.jsonrpc;version="[0.22,1)",org.eclipse.lsp4j.jsonrpc.json;vers
 ion="[0.22,1)",org.eclipse.lsp4j.jsonrpc.json.adapters;version="[0.22,1
 )",org.eclipse.lsp4j.jsonrpc.messages;version="[0.22,1)",org.eclipse.ls
 p4j.jsonrpc.services;version="[0.22,1)",org.eclipse.lsp4j.jsonrpc.util;
 version="[0.22,1)",org.eclipse.lsp4j.jsonrpc.validation;version="[0.22,
 1)",org.eclipse.lsp4j.services

Next, there is lsp4j v0.23.1 with
Import-Package: com.google.gson;version="[2.9.1,3.0)",com.google.gson.an notations;version="[2.9.1,3.0)"

(Bigger bundle MF excerpt here:)

Export-Package: org.eclipse.lsp4j;uses:="com.google.gson.annotations,org
 .eclipse.lsp4j.adapters,org.eclipse.lsp4j.jsonrpc.messages,org.eclipse.
 lsp4j.jsonrpc.validation";version="0.23.1",org.eclipse.lsp4j.adapters;u
 ses:="com.google.gson,com.google.gson.reflect,com.google.gson.stream,or
 g.eclipse.lsp4j,org.eclipse.lsp4j.jsonrpc.messages";version="0.23.1",or
 g.eclipse.lsp4j.launch;uses:="org.eclipse.lsp4j.jsonrpc,org.eclipse.lsp
 4j.services";version="0.23.1",org.eclipse.lsp4j.services;uses:="org.ecl
 ipse.lsp4j,org.eclipse.lsp4j.adapters,org.eclipse.lsp4j.jsonrpc.json,or
 g.eclipse.lsp4j.jsonrpc.messages,org.eclipse.lsp4j.jsonrpc.services";ve
 rsion="0.23.1",org.eclipse.lsp4j.util;uses:="org.eclipse.lsp4j";version
 ="0.23.1"
Import-Package: com.google.gson;version="[2.9.1,3.0)",com.google.gson.an
 notations;version="[2.9.1,3.0)",com.google.gson.reflect;version="[2.9.1
 ,3.0)",com.google.gson.stream;version="[2.9.1,3.0)",java.io,java.lang,j
 ava.lang.invoke,java.lang.reflect,java.util,java.util.concurrent,java.u
 til.function,org.eclipse.lsp4j,org.eclipse.lsp4j.adapters,org.eclipse.l
 sp4j.jsonrpc;version="[0.23,1)",org.eclipse.lsp4j.jsonrpc.json;version=
 "[0.23,1)",org.eclipse.lsp4j.jsonrpc.json.adapters;version="[0.23,1)",o
 rg.eclipse.lsp4j.jsonrpc.messages;version="[0.23,1)",org.eclipse.lsp4j.
 jsonrpc.services;version="[0.23,1)",org.eclipse.lsp4j.jsonrpc.util;vers
 ion="[0.23,1)",org.eclipse.lsp4j.jsonrpc.validation;version="[0.23,1)",
 org.eclipse.lsp4j.services

Though I have gson v2.10.1 and 2.11.0 installed I can't resolve both versions of lsp4j. The OSGi console in Eclipse shows:

g! lb com.google.gson

   15|Resolved   |    4|Gson (2.11.0)|2.11.0
 1011|Resolved   |    4|Gson (2.10.1)|2.10.1

g! lb org.eclipse.lsp4j
 
  621|Resolved   |    4|org.eclipse.lsp4j (0.23.1.v20240521-1815)|0.23.1.v20240521-1815
 1024|Installed  |    4|org.eclipse.lsp4j (0.22.0.v20240213-2011)|0.22.0.v20240213-2011

g! diag 1024
org.eclipse.lsp4j [1024]
  Unresolved requirement: Import-Package: com.google.gson.annotations; version="[2.9.1,2.11.0)"

As noted in this issue response, the problem seems likely related to the way in which the com.google.gson imports com.google.gson.annotations without any qualifications on the version.

Reproduction steps

Besides the original recreate, a simpler method would be:

  1. Install 2024-06 Eclipse, using the Enterprise Java package (this has both the org.eclipse.tips.json v0.3.400 plugin using gson v2.11.0 and it also has the OSGi console, for convenience).
  2. Install https://download.eclipse.org/lsp4j/updates/releases/0.22.0
    Help -> Install New Software then click Add button.
    For Location field add https://download.eclipse.org/lsp4j/updates/releases/0.22.0 then click Add.
  3. Check the "Lsp4j" check box, and complete the install, and restart.
  4. Open OSGi console:
    Window->Show View->Console, select "Host OSGi Console" from drop-down
  5. From console prompt type:
    lb org.eclipse.lsp4j
    You'll see something like:
  621|Resolved   |    4|org.eclipse.lsp4j (0.23.1.v20240521-1815)|0.23.1.v20240521-1815
 ...
 1013|Installed  |    4|org.eclipse.lsp4j (0.22.0.v20240213-2011)|0.22.0.v20240213-2011
  1. Type: diag 1013 (or whatever bundle # you see in the prev. cmd):
    You'll see something like:
org.eclipse.lsp4j [1013]
  Unresolved requirement: Import-Package: com.google.gson.annotations; version="[2.9.1,2.11.0)"

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions