java - Maven中库依赖的两个版本

标签 java maven

在我的 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/

相关文章:

java - 如何访问 session .jsp 文件中的应用程序数据

java - JSF 的 java 支持 HTML5

maven - 在 TOMCAT 8 中运行(部署?) "maven".war

java - maven依赖版本?

java - 为什么 Palantir QS 3.8 无法识别其自己的 XML 导出?

java - 检测 JTree 行上的双击

没有数据源的 Java Smart GWT listgrid - 过滤器不起作用

java - 如何为 Junit 测试类创建 jar

java - 如何使用 Maven 安装 Processing?

maven - 使用 groovy-eclipse-plugin 和 @Grab 时出错