Two versions of library dependency in Maven
在我的
1 2 3 4 5 | <dependency> <groupId>org.json</groupId> json</artifactId> <version>20170516</version> </dependency> |
我的程序需要并使用此版本的JSON。
1 | import org.json.JSONObject; |
当我放入
时
1 2 | final JsonObject jsonObject = new JsonObject(); System.out.println( jsonObject.getClass().getPackage().getImplementationVersion()); |
我得到
1 | 20170516 |
好的,好的。 (注意:这是程序的类,而不是测试!)
现在我用
1 | 0.0.20131108.vaadin1 |
我发现,此版本来自此依赖项
1 2 3 4 5 6 | <dependency> <groupId>org.skyscreamer</groupId> jsonassert</artifactId> <version>1.5.0</version> <scope>test</scope> </dependency> |
如果删除它,我的测试可以正常工作。
但是现在其他测试失败了,它使用了这种依赖性
1 2 | import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; |
和pom.xml
中
1 2 3 4 5 | <dependency> <groupId>org.springframework</groupId> spring-test</artifactId> <version>4.3.4.RELEASE</version> </dependency> |
如何配置maven,使程序使用JSON版本20170516,但是spring-test仍然可以使用jsonassert?
即使几乎是山姆名字,我也不认为这是
* maven
中的两种依赖关系版本
-编辑1
1 2 3 4 5 6 7 | 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 |
当
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <dependencyManagement> <dependencies> <dependency> <groupId>org.json</groupId> json</artifactId> <version>20170516</version> </dependency> <dependency> <groupId>org.skyscreamer</groupId> jsonassert</artifactId> <version>1.5.0</version> <scope>test</scope> </dependency> </dependencies> </dependencyManagement> |
请参阅Maven中的dependencyManagement和依赖项之间的区别
,或者您可以使用
除非
并非所有Java依赖项都兼容,请参见类路径。
您可以尝试为有问题的版本定义依赖项排除,但这可能会破坏
1 2 3 4 5 6 7 8 9 10 11 12 | <dependency> <groupId>org.skyscreamer</groupId> jsonassert</artifactId> <version>1.5.0</version> <scope>test</scope> <exclusions> <exclusion> <groupId>com.vaadin.external.google</groupId> android-json</artifactId> </exclusion> </exclusions> </dependency> |