在我的 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?
即使几乎相同的名字,我也不认为这是重复的
-- 编辑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
最佳答案
当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>
排除 child 依赖。
关于java - Maven中库依赖的两个版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53871333/