Maven + Spring 引导:在 class 路径上发现多次出现 org.json.JSONObject:
Maven + Spring Boot: Found multiple occurrences of org.json.JSONObject on the class path:
当我 运行 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。对 JSON 的唯一引用是
<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
</dependency>
Apache Maven 3.5.3
添加在
下
<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"
}
为 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
效果很好,但有一些人不喜欢的许可条款 ("The Software shall be used for Good, not Evil.")。所以 Vaadin 想使用这个图书馆,但不能确定他们有一天会不会用它来作恶。相反,他们重新实现了界面,发布了 android-json
并将其用作 org.json
的替代品。其他人也开始使用 android-json
,这样他们也不会受到不得使用其软件作恶的要求的约束。
这是一个很好的解决方案,除了当两个库在类路径上时,它们会发生冲突。
解决方法:
如果你从冲突的传递依赖中得到这个错误,那么你最好的选择是排除 Vaadin 的 android-json
库(由 Spring 引入),或者排除 org.json
库(由另一个引入依赖)。 Vaadin 的版本应该是相同的实现,但存在细微差别。
如果您在代码中使用 org.json
并且它与 Spring 的 Vaadin 依赖项冲突,那么我建议您尝试 open-json
。这是 Vaadin 重新实现 org.json
的端口,但他们更改了包,因此您不会与 org.json:json
或 com.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
类.
使用的任何导入
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"
}
当我 运行 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。对 JSON 的唯一引用是
<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
</dependency>
Apache Maven 3.5.3
添加在
下 <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"
}
为 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
效果很好,但有一些人不喜欢的许可条款 ("The Software shall be used for Good, not Evil.")。所以 Vaadin 想使用这个图书馆,但不能确定他们有一天会不会用它来作恶。相反,他们重新实现了界面,发布了 android-json
并将其用作 org.json
的替代品。其他人也开始使用 android-json
,这样他们也不会受到不得使用其软件作恶的要求的约束。
这是一个很好的解决方案,除了当两个库在类路径上时,它们会发生冲突。
解决方法:
如果你从冲突的传递依赖中得到这个错误,那么你最好的选择是排除 Vaadin 的 android-json
库(由 Spring 引入),或者排除 org.json
库(由另一个引入依赖)。 Vaadin 的版本应该是相同的实现,但存在细微差别。
如果您在代码中使用 org.json
并且它与 Spring 的 Vaadin 依赖项冲突,那么我建议您尝试 open-json
。这是 Vaadin 重新实现 org.json
的端口,但他们更改了包,因此您不会与 org.json:json
或 com.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
类.
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"
}