Когда я запускаю 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"
}
Сообщалось ли об этой проблеме проекту Spring Boot? Я могу найти аналогичный билет на Spring Cloud, но ничего для Spring Boot. Кажется странным, что они (транзитивно) зависят от библиотеки, которая переупаковывает org.json:json.
github.com/spring-projects/spring-boot/issues/15967, связанный с @DidierL, решен как не хочу вносить никаких изменений в стартер.
Спасибо! Я немного углубился в это, и на самом деле это намного глубже. Фактически Spring Boot удалил зависимости от org.json, потому что это считается несвободной лицензией из-за оговорки о недопустимости злонамеренного использования.. Это также, по-видимому, вызывает некоторые проблемы с путем к модулю.
Конфликты пути к классам даже при использовании Spring-Boot-Starter ... как прискорбно!
Спасибо, что показали, как это делается для Gradle!
Большое спасибо за то, что показали версию gradle !!!
Добавьте следующую строку для проектов 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 отлично работает, но в нем есть пункт лицензии, который некоторым не нравится («Программное обеспечение должно использоваться во благо, а не во зло»). Итак, Ваадин хотел использовать библиотеку, но не был уверен, что когда-нибудь они не воспользуются ею во зло. Вместо этого они повторно реализовали интерфейс, опубликовали android-json и использовали его как каплю замены для org.json. Другие также начали использовать android-json, чтобы они тоже не были связаны требованием не использовать свое программное обеспечение во зло.
Это прекрасное решение, за исключением того, что когда две библиотеки находятся в пути к классам, они сталкиваются.
Решение:
Если вы получаете эту ошибку из-за конфликтующих транзитивных зависимостей, то лучше всего исключить либо библиотеку Vaadin android-json (введенную Spring), либо исключить библиотеку org.json (введенную другой зависимостью). Версия Ваадина должна быть идентичной реализацией, но есть небольшие отличия.
Если вы используете org.json в своем коде и он конфликтует с зависимостью Spring от Vaadin, я бы рекомендовал попробовать open-json. Это порт повторной реализации org.json от Vaadin, но они изменили пакеты, поэтому у вас не будет конфликтов с 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.
Спасибо, похоже, моя ошибка устранилась. 1 готов, 99 осталось.
это должен быть принят ответ
Версия Gradle kotlin DSL на основе принятого ответа
testImplementation("org.springframework.boot:spring-boot-starter-test") {
exclude (
group = "com.vaadin.external.google",
module = "android-json"
)
}
Вы можете исключить модуль android-json из testImplementation.
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: "com.vaadin.external.google", module:"android-json"
}
Ответ Gradle на вопрос Maven.
Вы можете отказаться от своей зависимости от
org.json, потому что он считается несвободным программным обеспечением. Spring Boot удалил свою зависимость от него из-за этого, но это иногда приводит к таким же конфликтам, как у вас.