Lai*_*son 32 dependency-management maven maven-ear-plugin
(我最初在这里以非常详细的方式问过这个问题.我在这里摘录了它,因为maven-users邮件列表在这个问题上变得安静了.)(不仅仅是另一个新手问题)
我的参考资料是 http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Management ; 如果这已经过时或错误,请在本次讨论中告诉我.
该文件中有一节以"第二个,非常重要......"开头.接下来,我将把该部分的项目A和B,并从他们身上摘录.
在该部分中,您将看到该项目A有一个<dependencyManagement>部分 - 除其他外 - 定义工件,c具有范围compile:
<!-- In A's pom.xml; condensed for brevity -->
<dependencyManagement>
<dependency>
<groupId>test</groupId>
<artifactId>c</artifactId>
<version>1.0</version>
<scope>compile</scope> <!-- look: compile scope -->
</dependency>
</dependencyManagement>
Run Code Online (Sandbox Code Playgroud)
然后你会看到一个pom.xmlfor项目B,(a)继承自项目A(因此继承其dependencyManagement部分)和(b)建立对工件的依赖c,而不必指定它version.您还会注意到,在神器的依赖c覆盖的范围c是runtime,不是compile:
<!-- In B's pom.xml, whose parent is A's pom.xml (above); condensed for brevity -->
<dependencies>
<dependency>
<groupId>test</groupId>
<artifactId>c</artifactId>
<scope>runtime</scope> <!-- look: runtime scope -->
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
同样,你会注意到没有<version>元素,但有一个<scope>runtime</scope>元素.
我对此的解释是,当一切都说过和做过,B将取决于版本1.0神器c的runtime范围,而不是compile范围.
那是对的吗?我的maven-ear-plugin错误在于这是预期的行为.这不是maven-ear-plugin构建.ear文件时发生的事情.
接下来,如果这是正确的,我会还预计,如果神器c有任何传递runtime依赖他们将在现有B的runtime类路径(由有些莫名其妙表中定义http://maven.apache.org/guides/introduction/introduction- to-dependency-mechanism.html#Dependency_Scope).
那是对的吗?
Rag*_*ram 24
运行mvn dependency:tree在上面指定的bug链接中发布的示例项目,
[INFO] Building MEAR-143 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.3:tree (default-cli) @ mear-143 ---
[INFO] ljnelson:mear-143:pom:1.0-SNAPSHOT
[INFO] \- junit:junit:jar:4.8.2:test
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building MEAR-143 Leaf 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.3:tree (default-cli) @ mear-143-leaf ---
[INFO] ljnelson:mear-143-leaf:jar:1.0-SNAPSHOT
[INFO] \- junit:junit:jar:4.8.2:test
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building MEAR-143 Middle 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.3:tree (default-cli) @ mear-143-middle ---
[INFO] ljnelson:mear-143-middle:jar:1.0-SNAPSHOT
[INFO] +- ljnelson:mear-143-leaf:jar:1.0-SNAPSHOT:runtime
[INFO] \- junit:junit:jar:4.8.2:test
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building MEAR-143 EAR 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.3:tree (default-cli) @ mear-143-ear ---
[INFO] ljnelson:mear-143-ear:ear:1.0-SNAPSHOT
[INFO] +- ljnelson:mear-143-middle:jar:1.0-SNAPSHOT:runtime
[INFO] | \- ljnelson:mear-143-leaf:jar:1.0-SNAPSHOT:test (scope managed from ru
ntime)
[INFO] \- junit:junit:jar:4.8.2:test
Run Code Online (Sandbox Code Playgroud)
确实依赖于显式定义依赖scope的mear-143-leafin mear-143-middle的依赖性runtime,覆盖了父pom部分中test定义的范围.dependencyManagementmear-143
在mear-143-ear,mear-143-leaf包含传递.在这里,test在规定范围内dependencyManagement的mear-143优先继承的runtime范围.
我想这与你上面提到的部分中第二个项目符号点中指定的内容一致.在此引用它并以粗体和斜体突出显示相关部分:
b在B的父亲的依赖关系管理部分中定义,并且因为 依赖关系管理优先于依赖关系调解传递依赖关系,所以如果在一个或多个pom中引用它,将选择版本1.0.b也有编译范围
| 归档时间: |
|
| 查看次数: |
29745 次 |
| 最近记录: |