Evg*_*rov 7 java dependency-management pom.xml maven-3 maven
在我的项目中,我对openejb-core范围有依赖性provided.但它具有传递依赖性,slf4j其范围是compile(见截图).所有其他传递依赖项都按预期提供.
问题:是错误还是我错过了什么?
A_D*_*teo 12
在一个示例pom中我添加了:
<dependencies>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
<version>4.7.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
然后运行:
mvn dependency:tree -Dincludes=org.slf4j
Run Code Online (Sandbox Code Playgroud)
输出是:
[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:provided
Run Code Online (Sandbox Code Playgroud)
因此,您可以看到Maven与其官方文档一致.您的屏幕截图中的问题可能在您的IDE上.
从中我们可以看到,在范围内compile或runtime在范围内提供的内容,范围内provided或被test忽略的内容.
但是,如果我将样本pom更改为:
<dependencies>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
<version>4.7.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
并重新运行依赖树命令,输出如下:
[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
Run Code Online (Sandbox Code Playgroud)
现在看看:它不是所提供的依赖项的孩子,而是在同一级别.
让我们继续吧.
如果我的样本pom我删除sl4f-api依赖,但我添加到pom以下:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
<scope>compile</scope>
</dependency>
</dependencies>
</dependencyManagement>
Run Code Online (Sandbox Code Playgroud)
并重新运行依赖树命令,我最终获得与截图相同的内容:
[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
Run Code Online (Sandbox Code Playgroud)
宾果:该dependencyManagement部分覆盖了传递依赖的范围,也影响了provided范围的调解.这不是一个错误,它是设计的,因为在本节中,您定义了与依赖关系有关的治理类型.在这种情况下的图表也是正确的而不是误导性的,因为依赖性仅由引入范围openejb-core的dependencyManagement决定影响而引入.sl4f-apicompile
| 归档时间: |
|
| 查看次数: |
1977 次 |
| 最近记录: |