Maven + Spring Boot:在类路径上发现多次出现 org.json.JSONObject:

当我跑步时,我收到此警告。我该如何修复它?mvn test

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

这是我的.xml。对 JSON 的唯一引用是

    <!-- https://mvnrepository.com/artifact/org.json/json -->
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
    </dependency>

Apache Maven 3.5.3


答案 1

添加下

 <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>

以下排除项:

 <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>com.vaadin.external.google</groupId>
            <artifactId>android-json</artifactId>
        </exclusion>
    </exclusions>

同样,对于Gradle项目:

testCompile("org.springframework.boot:spring-boot-starter-test") {
    exclude group: "com.vaadin.external.google", module:"android-json"
}

答案 2

背景:效果很好,但有一些人不喜欢的许可条款(“本软件应用于善,而不是恶。所以瓦丁想使用图书馆,但不能确定他们有一天不会用它来作恶。相反,他们重新实现了该接口,发布了该接口并将其用作.其他人也开始使用,这样他们也不会受到不使用他们的软件作恶的要求的约束。org.jsonandroid-jsonorg.jsonandroid-json

这是一个很好的解决方案,除了当两个库在类路径上时,它们会发生冲突。

溶液:如果你从冲突的传递依赖关系中得到这个错误,那么你最好的办法是排除Vaadin的库(由Spring引入),或者排除库(由另一个依赖项引入)。Vaadin的版本意味着一个相同的实现,但存在细微的差异。android-jsonorg.json

如果你在代码中使用,并且它与Spring的Vaadin依赖关系相冲突,那么我建议你尝试。这是Vaadin重新实现的端口,但他们更改了软件包,因此您不会与 或 发生任何冲突org.jsonopen-jsonorg.jsonorg.json:jsoncom.vaadin.external.google:android-json

https://github.com/openjson/openjson

添加 gradle 依赖项:

    implementation('com.github.openjson:openjson:1.0.12')

或者在Maven中:

    <dependency>
        <groupId>com.github.openjson</groupId>
        <artifactId>openjson</artifactId>
        <version>1.0.12</version>
    </dependency>

然后更新类正在使用的任何导入。org.json


推荐