代码之家  ›  专栏  ›  技术社区  ›  Chloe

Maven+Spring引导:在类路径上发现多个org.json.JSONObject:

  •  5
  • Chloe  · 技术社区  · 6 年前

    当我跑的时候 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
    

    这是我的 pom.xml

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

    Apache Maven 3.5.3版

    2 回复  |  直到 5 年前
        1
  •  90
  •   ryenus    5 年前

    在下面添加

     <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
  •  14
  •   Planky    4 年前

    : org.json 工作很好,但有一个许可条款,有些人不喜欢(“软件应用于善,而不是恶。”)。所以瓦丁想用图书馆,但不能确定他们有一天不会用它作恶。相反,他们重新实现了发布的接口 android-json 组织.json . 其他人开始使用 这样他们也不会被不使用他们的软件作恶的要求所束缚。

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

    解决方案: 如果您从冲突的可传递依赖项中得到这个错误,那么最好排除Vaadin中的任何一个 安卓json 组织.json 库(由另一个依赖项引入)。Vaadin的版本本来是一个相同的实现,但是有一些细微的差别。

    如果你用的是 在您的代码中,它与Spring的Vaadin依赖项相冲突,那么我建议您尝试 open-json . 这是瓦丁重新实施 组织.json org.json:json com.vaadin.external.google:android-json

    https://github.com/openjson/openjson

    添加渐变依赖项:

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

    或者在Maven:

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

    组织.json

        3
  •  4
  •   Parthiban    6 年前

    为gradle项目添加下一行。

    testCompile('org.springframework.boot:spring-boot-starter-test'){
            exclude group: "com.vaadin.external.google", module:"android-json"
    }
    
        4
  •  2
  •   Alex Stanovsky    5 年前

    这对我有用:

    configurations {
         testImplementation.exclude group: 'com.vaadin.external.google', module: 'android-json'
    }
    
        5
  •  0
  •   xilef    4 年前

    Gradle kotlin DSL版本基于接受的答案

    testImplementation("org.springframework.boot:spring-boot-starter-test") {
            exclude (
                    group = "com.vaadin.external.google",
                    module = "android-json"
            )
        }
    
        6
  •  0
  •   Catarina Ferreira ShaonPro    4 年前

    android-json 模块来自 testImplementation

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