在我的pom.xml中
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20170516</version>
</dependency>我的程序需要并使用这个版本的JSON。
import org.json.JSONObject;当我输入的时候
final JsonObject jsonObject = new JsonObject();
System.out.println( jsonObject.getClass().getPackage().getImplementationVersion());我得到了
20170516好的,好的。(注意:这是程序的一个类,不是测试!)
现在我用mvn test运行我的单元测试(Mockito,JUnit)。我得到一个错误,它与JSONObject版本相关。日志上写着:
0.0.20131108.vaadin1我发现,这个版本来自于这个依赖
<dependency>
<groupId>org.skyscreamer</groupId>
<artifactId>jsonassert</artifactId>
<version>1.5.0</version>
<scope>test</scope>
</dependency>如果我删除它,我的测试就能正常工作。
但是现在其他测试失败了,这些测试使用了这个依赖项
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;在pom.xml中
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.4.RELEASE</version>
</dependency>如何配置maven,使程序使用JSON版本20170516,但spring-test仍然可以使用jsonassert?
即使几乎是同一个名字,我也不认为这是* two versions of dependencies in maven的重复
--编辑1
mvn dependency:tree | grep json
[INFO] +- org.skyscreamer:jsonassert:jar:1.5.0:test
[INFO] | \- com.vaadin.external.google:android-json:jar:0.0.20131108.vaadin1:test
[INFO] +- com.jayway.jsonpath:json-path-assert:jar:2.2.0:test
[INFO] | +- com.jayway.jsonpath:json-path:jar:2.2.0:test
[INFO] | | \- net.minidev:json-smart:jar:2.2.1:test
[INFO] +- org.json:json:jar:20170516:compile发布于 2018-12-20 23:19:26
除非spring-test或jsonassert会在未来的版本中对org.json:json依赖进行内部遮蔽,否则您将不得不跨类路径使用一个版本的org.json:json。
并不是所有的Java依赖都是兼容的,请参见classpath hell。
您可以尝试为有问题的版本定义Dependency Exclusion,但这可能会阻碍jsonassert依赖:
<dependency>
<groupId>org.skyscreamer</groupId>
<artifactId>jsonassert</artifactId>
<version>1.5.0</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>com.vaadin.external.google</groupId>
<artifactId>android-json</artifactId>
</exclusion>
</exclusions>
</dependency>发布于 2018-12-20 23:20:16
当dependencyManagement中存在冲突时,您需要添加要强制执行特定版本的依赖项。这确保了maven使用20170516版本的json依赖,即使jsonassert依赖于不同的版本。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20170516</version>
</dependency>
<dependency>
<groupId>org.skyscreamer</groupId>
<artifactId>jsonassert</artifactId>
<version>1.5.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>请参阅Differences between dependencyManagement and dependencies in Maven
或者您可以使用<exclusions>来排除子依赖项。
https://stackoverflow.com/questions/53871333
复制相似问题