39
votes

Maven Build a échoué en raison des dépendances JDT - Aucune versions disponibles pour org.osgi.service: org.osgi.service.prefs: jar: [1.1.0,1.2.0)

Aujourd'hui, lorsque j'ai essayé d'installer mon projet Maven, j'obtiens une erreur en raison des dépendances JDT et voici les informations du rapport:

    <dependencies>
        <dependency>
            <groupId>org.eclipse.jdt</groupId>
            <artifactId>org.eclipse.jdt.core</artifactId>
            <version>3.20.0</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.platform</groupId>
            <artifactId>org.eclipse.core.commands</artifactId>
            <version>3.9.800</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.eclipse.platform/org.eclipse.core.contenttype -->
        <dependency>
            <groupId>org.eclipse.platform</groupId>
            <artifactId>org.eclipse.core.contenttype</artifactId>
            <version>3.7.900</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.eclipse.platform/org.eclipse.core.filesystem -->
        <dependency>
            <groupId>org.eclipse.platform</groupId>
            <artifactId>org.eclipse.core.filesystem</artifactId>
            <version>1.7.700</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.eclipse.platform/org.eclipse.core.jobs -->
        <dependency>
            <groupId>org.eclipse.platform</groupId>
            <artifactId>org.eclipse.core.jobs</artifactId>
            <version>3.10.1100</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.eclipse.platform/org.eclipse.core.resources -->
        <dependency>
            <groupId>org.eclipse.platform</groupId>
            <artifactId>org.eclipse.core.resources</artifactId>
            <version>3.14.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.eclipse.platform/org.eclipse.core.runtime -->
        <dependency>
            <groupId>org.eclipse.platform</groupId>
            <artifactId>org.eclipse.core.runtime</artifactId>
            <version>3.20.100</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.eclipse.platform/org.eclipse.equinox.common -->
        <dependency>
            <groupId>org.eclipse.platform</groupId>
            <artifactId>org.eclipse.equinox.common</artifactId>
            <version>3.14.100</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.eclipse.platform/org.eclipse.osgi -->
        <dependency>
            <groupId>org.eclipse.platform</groupId>
            <artifactId>org.eclipse.osgi</artifactId>
            <version>3.16.200</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.eclipse.platform/org.eclipse.text -->
        <dependency>
            <groupId>org.eclipse.platform</groupId>
            <artifactId>org.eclipse.text</artifactId>
            <version>3.11.0</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.6.1</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.75</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.platform</groupId>
            <artifactId>org.eclipse.core.expressions</artifactId>
            <version>3.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.platform</groupId>
            <artifactId>org.eclipse.equinox.app</artifactId>
            <version>1.6.0</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.platform</groupId>
            <artifactId>org.eclipse.equinox.preferences</artifactId>
            <version>3.9.0</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.platform</groupId>
            <artifactId>org.eclipse.equinox.registry</artifactId>
            <version>3.11.0</version>
        </dependency>
    </dependencies>


2 commentaires

Le org.eclipse.equinox.preferences jar / bundle de la version 3.9.0 faisait partie de la version Eclipse 2021-09 et contient / exporte la org.osgi.service.prefs package dans la version 1.1.1. En revanche, le org.eclipse.equinox.preferences jar / bundle de la version 3.10.0 fera partie de la version Eclipse 2022-06 qui est publiée aujourd'hui et ne contient pas et ne contient pas le org.osgi.service.prefs package. Avec d'autres mots, vos bundles / pots Eclipse proviennent de différentes versions. Utiliser eCentral résoudrait votre problème et faciliterait la maintenance de votre projet.


Causé par une dépendance incorrecte org.osgi.service.prefs dans org.eclipse.equinox.preferences-3.10.0 qui a déjà été corrigé: github.com/eclipse-equinox/equinox.bundles/issues/54


7 Réponses :


21
votes

Edit: Le problème est connu par l'équipe du projet et suivi sous le nom de eclipse-equinox /quinox.bundles#54 sur github.

La dépendance:

  <repositories>
    <repository>
      <id>ecentral</id>
      <url>https://raw.githubusercontent.com/jmini/ecentral/HEAD/repo</url>
    </repository>
  </repositories>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>fr.jmini.ecentral</groupId>
        <artifactId>eclipse-platform-dependencies</artifactId>
        <version>4.14</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <dependencies>
    <dependency>
      <groupId>org.eclipse.jdt</groupId>
      <artifactId>org.eclipse.jdt.core</artifactId>
      <!-- no version needed here, because it is defined in the BOM -->
    </dependency>
  </dependencies>

qui est l'une de votre dépendance transitive, fait référence à cette dépendance dans sa liste de dépendances:

<dependency>
    <groupId>org.eclipse.jdt</groupId>
    <artifactId>org.eclipse.jdt.core</artifactId>
    <version>3.20.0</version>
</dependency>
  • org.eclipse.platform: org.eclipse.core.resources: [3.12.0,4.0.0)
  • org.eclipse.platform: org.eclipse.core.runtime: [3.13.0,4.0.0)
  • org.eclipse.platform: org.eclipse.core.filesystem: [1.7.0,2.0.0)
  • org.eclipse.platform: org.eclipse.Text: [3.6.0,4.0.0)

Si vous ne faites rien, Maven prend toujours le dernier:

aujourd'hui (juin 2022) Ce serait:

  • org.eclipse.core.resources : 3.16.100
  • org.eclipse.core.runtime : 3.24.100
  • org.eclipse.core.filesystem : 1.9.300
  • org.eclipse.text : 3.12.0

Lorsque la bibliothèque a été publiée (décembre 2019), c'était:

  • org.eclipse.core.resources : 3.13.600
  • org.eclipse.core.runtime : 3.17.0
  • org.eclipse.core.filesystem : 1.7.600
  • org.eclipse.text : 3.10.0

Et bien sûr, c'est récursif, vous devez le faire pour toutes les dépendances.


Laisser Maven choisir toujours le dernier est problématique:

  • Cela vous empêche de créer une construction reproductible, car les dépendances choisies par Maven dépend de ce qui est disponible sur Maven Central ce jour-là.
  • Vous devez résoudre les conflits.
  • Vous êtes potentiellement le premier à essayer une combinaison.

C'est pourquoi j'utilise toujours un ensemble de projets qui ont été publiés ensemble. Soit dit en passant, c'est aussi ainsi que le projet Eclipse lui-même le fait (en utilisant des sites de mise à jour P2 et une plate-forme cible).

Je publie des fichiers maven bom pour corriger les versions: Projet eCentral


C'est ainsi que vous pouvez le faire:

<groupId>org.eclipse.platform</groupId>
<artifactId>org.eclipse.equinox.preferences</artifactId>
<version>3.10.0</version>


0 commentaires

7
votes

Vous pouvez exclure la dépendance comme ceci:

<dependency>
<groupId>org.eclipse.jdt</groupId>
<artifactId>org.eclipse.jdt.core</artifactId>
<version>3.24.0</version>
<exclusions>
    <exclusion>
        <groupId>org.osgi.service</groupId>
        <artifactId>org.osgi.service.prefs</artifactId>
    </exclusion>
</exclusions>


0 commentaires

5
votes

donc la raison de cet échec est la dépendance org.osgi.service org.osgi.service.prefs

Mais le groupe org.osgi.service n'existe pas, mais plutôt c'est seulement org.osgi La dépendance doit donc sembler

<groupId>org.osgi</groupId>
<artifactId>org.osgi.service.prefs</artifactId>


0 commentaires

9
votes

Parce que j'ai rencontré ce problème aujourd'hui aussi, mais via la sous-dépendance du plugin, ma solution temporaire consiste à télécharger le régulier org.osgi: org.osgi.service.prefs: jar: 1.1.2 et installez-le dans le référentiel local en tant que org.osgi.service: org.osgi.service.prefs: jar: 1.1.2 .


2 commentaires

Je l'ai également obtenu via un plugin, mais l'installation manuelle n'est pas une solution pour une situation multi-utilisateurs ..: /


Oui. Heureusement, nous avons un référentiel d'entreprise où je peux placer de telles choses.



3
votes

Même moi, je suis confronté à ce problème depuis aujourd'hui, cela fonctionnait bien jusqu'à hier. Enfin, ce que j'ai trouvé, c'est que Pom of org.eclipse.equinox.preferences: 3.10.0 ID de groupe mentionné comme org.osgi.service, mais l'artefact est situé dans Repo1.maven.org chez org / osgi, il n'y a pas de dossier de service en elle. J'ai changé l'ID de groupe de dépendance en org.osgi dans le pom d'org.eclipse.equinox.preférences, puis cela a fonctionné.

- Edit-- Je peux voir une nouvelle version de 3.10.1 ajoutée dans Repo qui a corrigé l'ID de groupe à org.osgi au lieu d'org.osgi.service


0 commentaires

4
votes

J'ai le même problème aujourd'hui dans notre projet Springboot 1.5.25 avec org.hibernate: Hibernate-Tools: Jar: 5.0.6.Final

Le message d'erreur comme suit:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-tools</artifactId>
    <version>${hibernate-tools.version}</version>
    <!-- exclure the old org.eclipse.platform -->
   <exclusions>
        <exclusion>
            <groupId>org.eclipse.platform</groupId>
            <artifactId>org.eclipse.equinox.preferences</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- the 3.10.1 org.eclipse.platform fixed the pb -->
<dependency>
    <groupId>org.eclipse.platform</groupId>
    <artifactId>org.eclipse.equinox.preferences</artifactId>
    <version>3.10.1</version>
</dependency>

J'utilise le Nexus privé, pour résoudre ce problème, j'ai ajouté un proxy Maven2 (Maven-Ecentral) repo vers https://raw.githubusercontent.com/jmini/ecentral/head/repo , merci @jmini

Ensuite, a ajouté les lignées suivantes dans le pom.xml

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>fr.jmini.ecentral</groupId>
                <artifactId>eclipse-platform-dependencies</artifactId>
                <version>4.14</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <repositories>
        <repository>
            <id>ecentral</id>
            <url>https://nexus.xxxx.xxx/repository/maven-ecentral/</url>
        </repository>
    </repositories>

Recharger votre projet avec idée, cela devrait fonctionner.


Une autre solution consiste à utiliser des exclusions

# Failed to collect dependencies at org.hibernate:hibernate-tools:jar:5.0.6.Final -> 
# org.eclipse.jdt:org.eclipse.jdt.core:jar:3.12.2 ->
# org.eclipse.platform:org.eclipse.core.resources:jar:3.11.1 ->
# org.eclipse.platform:org.eclipse.core.expressions:jar:3.5.100 ->
# org.eclipse.platform:org.eclipse.core.runtime:jar:3.12.0 -> 
# org.eclipse.platform:org.eclipse.equinox.preferences:jar:3.10.0 -> 
# org.osgi.service:org.osgi.service.prefs:jar:[1.1.0,1.2.0): No versions available for org.osgi.service:org.osgi.service.prefs:jar:[1.1.0,1.2.0) within specified range -> [Help 1]


0 commentaires

0
votes

J'ai rencontré ce problème avec un plugin maven (net.revelc.code.formatter). Nous l'utilisons à partir d'un autre plugin maven qui génère du code. Puisqu'il s'agit juste d'un formateur pour le code généré, ma solution était de supprimer l'utilisation du plugin de format. Évidemment, je ne pouvais pas utiliser les solutions ci-dessus, car je ne veux pas déborder le code de format.


0 commentaires