Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven中库依赖的两个版本_Java_Maven - Fatal编程技术网

Java Maven中库依赖的两个版本

Java Maven中库依赖的两个版本,java,maven,Java,Maven,在我的pom.xml中 <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20170516</version> </dependency> 当我投入 final JsonObject jsonObject = new JsonObject(); System.out.

在我的
pom.xml

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20170516</version>
</dependency>
当我投入

final JsonObject jsonObject = new JsonObject();
System.out.println( jsonObject.getClass().getPackage().getImplementationVersion());
我明白了

20170516
好,好。(注意:这是程序的一个类,不是测试!)

现在我用
mvn测试运行我的单元测试(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>

除非
spring-test
jsonassert
将在未来版本中对
org.json:json
依赖项进行内部着色,否则您必须在类路径中使用一个版本的
org.json:json

并非所有Java依赖项都兼容,请参阅

您可以尝试为有问题的版本定义依赖项,但这可能会阻止
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>

天空尖叫者
杰索纳塞特
1.5.0
测验
com.vaadin.external.google
android json

除非
spring test
jsonassert
会在未来版本中对
org.json:json
依赖项进行内部屏蔽,否则您必须在类路径中使用一个版本的
org.json:json

并非所有Java依赖项都兼容,请参阅

您可以尝试为有问题的版本定义依赖项,但这可能会阻止
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>

天空尖叫者
杰索纳塞特
1.5.0
测验
com.vaadin.external.google
android json

依赖项管理中存在冲突时,您需要添加要强制实施特定版本的依赖项。这确保了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>

org.json


或者可以使用
排除子依赖项

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>

org.json


或者可以使用
排除子依赖项

“我如何配置maven,程序使用JSON版本20170516,但spring测试仍然可以使用jsonassert”maven是您想要的吗?您可以在测试期间使用某些版本,在编译和生成时使用其他版本。不,这没有帮助。正如我所写的,使用新版本JsonObject的关键点是在类中,而不是在该类的测试中。“我如何配置maven,程序使用JSON版本20170516,但spring测试仍然可以使用jsonassert”maven是您要找的吗?您可以在测试期间使用某些版本,在编译和生成时使用其他版本。不,这没有帮助。正如我所写的,使用JsonObject新版本的关键点是在类中,而不是在该类的测试中。A添加了此排除,但我仍然在测试上下文中获得JSON的0.0.20131108.vaadin1版本。
mvn dependency:tree
,您必须排除每一个。请注意,这可能是个坏主意,库可能会停止。@Paflow更新了答案,排除应该匹配工件
groupId
artifactId
。成功了。由于JSONAssert的用法非常明确(所有使用mockMvc的测试),我认为我可以冒险。A添加了这个排除,但我仍然在测试上下文中获得JSON的0.0.20131108.vaadin1版本。
mvn dependency:tree
,您必须排除每一个。请注意,这可能是个坏主意,库可能会停止。@Paflow更新了答案,排除应该匹配工件
groupId
artifactId
。成功了。由于JSONAssert的用法非常明确(所有使用mockMvc的测试),我想我可以冒险。我从中删除了这两个,并将您的代码放在下面,但现在我得到了很多错误。您不应该从
依赖项中删除上述内容。您应该保留它们,并且还需要将它们包括在
依赖项管理中。我从中删除了这两个,并将您的代码放在下面,但现在我收到了很多错误。您不应该从
依赖项中删除上述内容。您应该保留它们,并且还需要将它们包括在
依赖项管理中。