Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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可传递依赖项具有范围编译,而依赖项提供了范围_Java_Maven_Maven 3_Pom.xml_Dependency Management - Fatal编程技术网

Java Maven可传递依赖项具有范围编译,而依赖项提供了范围

Java Maven可传递依赖项具有范围编译,而依赖项提供了范围,java,maven,maven-3,pom.xml,dependency-management,Java,Maven,Maven 3,Pom.xml,Dependency Management,在我的项目中,我提供了范围为的openejb核心依赖项。但是,它具有slf4j的传递依赖关系,其范围是compile(请参见屏幕截图)。所有其他可传递依赖项都按预期提供 问题:是bug还是我遗漏了什么 在我添加的样品pom中: org.apache.openejb . 屏幕截图中的问题可能在IDE上 该表是该主题的关键点: 从中,我们可以看到,在范围编译或运行时中传递的内容在提供的范围内,在范围中提供的或测试中传递的内容被忽略 但是,如果我将示例pom更改为: org.apache.ope

在我的项目中,我提供了范围为
openejb核心
依赖项
。但是,它具有
slf4j
的传递依赖关系,其范围是
compile
(请参见屏幕截图)。所有其他可传递依赖项都按预期提供

问题:是bug还是我遗漏了什么


在我添加的样品pom中:


org.apache.openejb
. 屏幕截图中的问题可能在IDE上

该表是该主题的关键点:

从中,我们可以看到,在范围
编译
运行时
中传递的内容在提供的范围内,在范围
中提供的
测试
中传递的内容被忽略

但是,如果我将示例pom更改为:


org.apache.openejb
openejb内核
4.7.0
假如
org.slf4j
slf4j api
1.7.7
并重新运行dependency tree命令,输出如下:

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ test-junit ---
[INFO] com.sample:test-sample:jar:0.0.1-SNAPSHOT   
[INFO] +- org.apache.openejb:openejb-core:jar:4.7.0:provided  
[INFO] |  \- org.slf4j:slf4j-jdk14:jar:1.7.7:provided  
[INFO] \- org.slf4j:slf4j-api:jar:1.7.7:compile  
现在来看:它不是作为提供的依赖项的子项出现的,而是处于相同的级别

让我们继续

如果在示例pom上,我删除了
sl4f api
依赖项,但在pom中添加了以下内容:

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ test-junit ---
[INFO] com.sample:test-sample:jar:0.0.1-SNAPSHOT   
[INFO] +- org.apache.openejb:openejb-core:jar:4.7.0:provided  
[INFO] |  \- org.slf4j:slf4j-jdk14:jar:1.7.7:provided  
[INFO] \- org.slf4j:slf4j-api:jar:1.7.7:compile  

org.slf4j
slf4j api
1.7.7
编译
然后重新运行dependency tree命令,我最终得到与您的屏幕截图相同的结果:

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ test-junit ---
[INFO] com.sample:test-sample:jar:0.0.1-SNAPSHOT   
[INFO] \- org.apache.openejb:openejb-core:jar:4.7.0:provided   
[INFO]    +- org.slf4j:slf4j-jdk14:jar:1.7.7:provided  
[INFO]    \- org.slf4j:slf4j-api:jar:1.7.7:compile  

宾果
依赖项管理
部分覆盖了可传递依赖项的范围,也影响了
提供的
范围上的中介。这不是一个bug,而是设计上的问题,因为在本节中,您定义了一种与依赖项相关的治理。这种情况下的图表也是正确的,没有误导性,由于依赖关系仅由
openejb-core
引入,然后受
dependencyManagement
sl4f-api
放入作用域
compile

的决定的影响,那么同样的依赖关系是否也由作用域compile中的另一个依赖关系过渡引入呢?不。仅在这个例子中,它为您的项目提供了范围。但是openejb core可以用compile作用域声明它,这就是为什么您可以将它视为compile会自动将可传递依赖项放在scope provide上,而不管它们声明的作用域是什么@巴拉吉卡提卡你说的不是correct@EvgenyMakarov如果运行
mvn dependency:tree-Dincludes=org.slf4j
是否在其他地方发现它?是否有家长pom或从属关系管理部分?谢谢您的详细回答。这似乎是依赖管理的情况。我不知道这样的maven行为感谢您提供了如此详细的回答,为我澄清了一些事情。我们可以看到类似的问题,没有任何
dependencyManagement
,但是当一个提供范围的分支和另一个编译范围的分支带来了一个可传递的依赖时:编译范围赢得了可传递的依赖,这非常令人困惑,我发现
依赖项:分析
非常方便,可以理解使用了哪些依赖项,哪些没有
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ test-junit ---
[INFO] com.sample:test-sample:jar:0.0.1-SNAPSHOT   
[INFO] \- org.apache.openejb:openejb-core:jar:4.7.0:provided   
[INFO]    +- org.slf4j:slf4j-jdk14:jar:1.7.7:provided  
[INFO]    \- org.slf4j:slf4j-api:jar:1.7.7:compile