When I run mvn test
I get this warning. How can I fix it?
Found multiple occurrences of org.json.JSONObject on the class path:
jar:file:/C:/Users/Chloe/.m2/repository/org/json/json/20140107/json-20140107.jar!/org/json/JSONObject.class
jar:file:/C:/Users/Chloe/.m2/repository/com/vaadin/external/google/android-json/0.0.20131108.vaadin1/android-json-0.0.20131108.vaadin1.jar!/org/json/JSONObject.class
You may wish to exclude one of them to ensure predictable runtime behavior
Here is my pom.xml. The only reference to JSON is
<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
</dependency>
Apache Maven 3.5.3
This worked for me:
Background:
org.json
works great, but has a license clause that some people don't like ("The Software shall be used for Good, not Evil."). So Vaadin wanted to use the library, but couldn't be sure they wouldn't use it for evil someday. Instead, they re-implemented the interface, publishedandroid-json
and used it as a drop in replacement fororg.json
. Others began to useandroid-json
as well so that they too would not be bound by the requirement of not using their software for evil.This is a fine solution, except that when the two libraries are on the classpath, they collide.
Solution: If you get this error from conflicting transitive dependencies, then your best bet is to exclude either Vaadin's
android-json
library (brought in by Spring), or exclude theorg.json
library (brought in by another dependency). Vaadin's version is meant to be an identical implementation, but there are subtle differences.If you're using
org.json
in your code and it is conflicting with Spring's Vaadin dependency, then I would recommend tryingopen-json
. It's a port of Vaadin's re-implementation oforg.json
, but they changed the packages so you won't have any conflicts withorg.json:json
orcom.vaadin.external.google:android-json
https://github.com/openjson/openjson
Add gradle dependency:
Or in Maven:
Then update any imports that were being used by
org.json
classes.Gradle kotlin DSL version based on the accepted answer
Add under
The following exclusion:
Similarly, for Gradle projects:
Add the below line for gradle projects.