Contexte : org.json
fonctionne très bien, mais possède une clause de licence que certaines personnes n'aiment pas ("Le logiciel doit être utilisé pour le bien, pas pour le mal"). Vaadin voulait donc utiliser la bibliothèque, mais ne pouvait pas être sûr de ne pas l'utiliser pour le mal un jour. Au lieu de cela, ils ont réimplémenté l'interface, publié android-json
et l'a utilisé pour remplacer le org.json
. D'autres ont commencé à utiliser android-json
afin qu'eux aussi ne soient pas liés par l'obligation de ne pas utiliser leurs logiciels à des fins malveillantes.
C'est une bonne solution, sauf que lorsque les deux bibliothèques sont sur le classpath, elles entrent en collision.
Solution : Si vous obtenez cette erreur à cause de dépendances transitives conflictuelles, votre meilleure chance est d'exclure l'une ou l'autre des dépendances transitives de Vaadin. android-json
(apporté par Spring), ou exclure la bibliothèque org.json
(apportée par une autre dépendance). La version de Vaadin est censée être une implémentation identique, mais il existe des différences subtiles.
Si vous utilisez org.json
dans votre code et qu'il entre en conflit avec la dépendance Vaadin de Spring, alors je vous recommande d'essayer open-json
. Il s'agit d'un portage de la réimplémentation de Vaadin. org.json
mais ils ont changé les paquets pour que vous n'ayez aucun conflit avec org.json:json
o com.vaadin.external.google:android-json
https://github.com/openjson/openjson
Ajouter la dépendance de gradle :
implementation('com.github.openjson:openjson:1.0.12')
Ou dans Maven :
<dependency>
<groupId>com.github.openjson</groupId>
<artifactId>openjson</artifactId>
<version>1.0.12</version>
</dependency>
Ensuite, mettez à jour toutes les importations qui étaient utilisées par org.json
classes.
1 votes
Vous voudrez peut-être abandonner votre dépendance à
org.json
car il est considéré comme un logiciel non libre. Spring Boot a supprimé sa dépendance à l'égard de ce dernier à cause de cela. mais cela entraîne parfois des conflits comme le vôtre.