Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven+;Spring Boot:在类路径上发现org.json.JSONObject多次出现:_Java_Spring_Maven_Spring Boot_Build Dependencies - Fatal编程技术网

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

Java Maven+;Spring Boot:在类路径上发现org.json.JSONObject多次出现:,java,spring,maven,spring-boot,build-dependencies,Java,Spring,Maven,Spring Boot,Build Dependencies,当我运行mvn测试时会收到此警告。我怎样才能修好它 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/r

当我运行
mvn测试时
会收到此警告。我怎样才能修好它

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
这是我的名片。对JSON的唯一引用是

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

org.json
json
ApacheMaven 3.5.3

添加到

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

为gradle项目添加以下行

testCompile('org.springframework.boot:spring-boot-starter-test'){
        exclude group: "com.vaadin.external.google", module:"android-json"
}
这对我很有用:

configurations {
     testImplementation.exclude group: 'com.vaadin.external.google', module: 'android-json'
}

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

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

解决方案: 如果您从冲突的可传递依赖项中得到此错误,那么您最好排除Vaadin的
android json
库(由Spring引入),或者排除
org.json
库(由另一个依赖项引入)。Vaadin的版本本应是一个相同的实现,但存在细微的差异

如果您在代码中使用
org.json
,并且它与Spring的Vaadin依赖项冲突,那么我建议尝试
openJSON
。这是Vaadin重新实现
org.json
的一个端口,但他们更改了包,因此您不会与
org.json:json
com.Vaadin.external.google:android json

添加渐变依赖项:

    implementation('com.github.openjson:openjson:1.0.12')
或者在Maven:


com.github.openjson
openjson
1.0.12

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

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

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

您可以从
testImplementation
中排除
android json
模块

testImplementation('org.springframework.boot:spring-boot-starter-test') {

         exclude group: "com.vaadin.external.google", module:"android-json"
    
}

是否已将此问题报告给Spring Boot项目?我找不到弹簧靴的东西。奇怪的是,他们(通过传递)依赖于一个库,该库重新打包
org.json:json
@didierrl-related,因为他们不想对初学者做任何更改。谢谢!我更深入了一点,事实上,它比这更深。其实是因为。这显然也会导致.Classpath冲突,即使在使用SpringBootStarter时也是如此。。真不幸!谢谢你展示了它是如何为格雷德尔做的!您可能希望删除对
org.json
的依赖关系,因为它被视为非自由软件。但这有时会导致像你这样的冲突。Gradle回答了一个Maven问题。谢谢,这似乎消除了我的错误。1下,99下。谢谢,它解决了问题
testImplementation("org.springframework.boot:spring-boot-starter-test") {
        exclude (
                group = "com.vaadin.external.google",
                module = "android-json"
        )
    }
testImplementation('org.springframework.boot:spring-boot-starter-test') {

         exclude group: "com.vaadin.external.google", module:"android-json"
    
}