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的测试),我想我可以冒险。我从中删除了这两个,并将您的代码放在下面,但现在我得到了很多错误。您不应该从依赖项中删除上述内容。您应该保留它们,并且还需要将它们包括在依赖项管理中。我从中删除了这两个,并将您的代码放在下面,但现在我收到了很多错误。您不应该从依赖项中删除上述内容。您应该保留它们,并且还需要将它们包括在依赖项管理中。