Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.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/5.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-从x管理的版本,因重复而省略?_Java_Maven_Dependency Management - Fatal编程技术网

Java Maven-从x管理的版本,因重复而省略?

Java Maven-从x管理的版本,因重复而省略?,java,maven,dependency-management,Java,Maven,Dependency Management,我很难理解maven依赖关系树在声明从x管理的版本时会发生什么;因重复而省略 例如,假设我在server-a的依赖项管理部分定义了enterprise-data-2.4 在server-a的依赖关系树中,我得到了以下内容,用于其中一个依赖关系server-b拉入enterprise-data-2.4 [INFO] +- hello.world.welcome.to:server-b:jar:3.1-SNAPSHOT:runtime [INFO] | +- (hello.world.where.

我很难理解maven依赖关系树在声明从x管理的版本时会发生什么;因重复而省略

例如,假设我在
server-a
的依赖项管理部分定义了
enterprise-data-2.4

server-a
的依赖关系树中,我得到了以下内容,用于其中一个依赖关系
server-b
拉入
enterprise-data-2.4

[INFO] +- hello.world.welcome.to:server-b:jar:3.1-SNAPSHOT:runtime
[INFO] |  +- (hello.world.where.am: enterprise-data:jar:2.4:runtime - version managed from 3.0; omitted for duplicate)
假设
server-b
是唯一拉入
enterprise-data-2.4
的jar,我的理解是
server-a
将始终拉入
enterprise-data-2.4
。这是正确的吗

但是,我在
server-b
中的代码依赖于
enterprise-data-3.0
server-b
的编译时依赖于
enterprise-data-3.0

现在,我有一个测试项目,比如说
test-b
,它测试
server-b
jar,它存在于
server-a
项目中,并且测试依赖于
enterprise-data-3.0
。这些测试直接命中
server-a
上的代码

当我在
test-b
中运行测试时,我是否应该在尝试访问
enterprise-data-3.0
中存在的功能时出错,因为它没有被
server-a
拉入,或者它是否会通过,因为对
enterprise-data-3.0
有测试依赖关系?它目前通过了测试,但我不确定测试依赖性是否足够

请帮我理解

编辑:我正在使用
maven-3

谢谢

例如,假设我在server-a的依赖项管理部分定义了enterprise-data-2.4

然后你总是会得到2.4,即使只有罐子依赖于1.8。依赖关系管理覆盖依赖关系中介

假设server-b是惟一一个拉入enterprise-data-2.4的jar,我的理解是server-a在这里总是拉入enterprise-data-2.4。这是正确的吗

假设您没有依赖关系管理,那么是的。如果有多个依赖于不同版本的依赖项,那么根据Maven version>2.0.9的依赖项中介规则,首先加载哪一个(及其可传递依赖项)是一个问题。其他将是:“从x开始管理,重复时省略”

当我在测试b中运行测试时,我在尝试访问enterprise-data-3.0中存在的功能时是否会出错,因为它没有被服务器a拉入,还是会通过测试,因为它依赖于enterprise-data-3.0?它目前通过了测试,但我不确定测试依赖性是否足够

如果它使用不兼容的代码拉错了版本,是的,您将看到错误。对于Maven 3,使用3.0定义测试范围依赖项,使用2.4定义编译范围依赖项,这意味着Maven将覆盖2.4,并使用在测试范围上定义的较新的依赖项。有关更多详细信息,请参阅


尽管如此,您始终可以在test-b中使用依赖项管理来修复要使用的每个依赖项的版本。

Maven可传递依赖项的依赖项中介通过将第一个声明用作主声明来工作。因为跟踪可传递的依赖关系很麻烦,所以您确实应该研究依赖关系管理。基本上可以在这里看到我的答案以了解详细信息:@t0mppa-我正在使用依赖关系管理来拉入enterprise-data-2.4。请再读一遍我的问题。好的,重读并尝试回答你的问题。如果我仍然误解你,请用一些具体的例子来编辑你的问题。谢谢你的回答。