首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时应该显式定义maven中的传输依赖项?

何时应该显式定义maven中的传输依赖项?
EN

Stack Overflow用户
提问于 2012-10-21 05:10:08
回答 2查看 1.1K关注 0票数 7

许多开源项目(如spring )都由多个模块组成,当将这些模块作为maven中的依赖项添加时,我应该显式地定义每个依赖项,或者让传递依赖管理完成它的任务。例如,以下两种情况中的哪一种是最佳做法。

案例1:包括我想要的最高级别特性()

代码语言:javascript
复制
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>3.1.2.RELEASE</version>
    </dependency>

案例2:将框架的每个部分包含为显式依赖项

代码语言:javascript
复制
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>3.1.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>3.1.2.RELEASE</version>
    </dependency>
            .... other dependencies that are transitively resolved by maven
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>3.1.2.RELEASE</version>
    </dependency>

哪一种是最佳实践案例1还是案例2?为什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-21 06:08:54

这取决于您是否声明使用相同依赖项的任何其他依赖项(在本例中是Spring)。如果您所需要的只是顶层依赖项,请声明这一点。如果使用依赖于传递依赖的特定版本的其他依赖项,则将其声明为显式依赖项。

以Spring为例:如果声明spring-webmvc,然后决定需要另一个spring包,比如spring-security,那么明确定义它们都依赖的任何共享依赖关系可能是个好主意,这样您就可以知道项目中包含了哪个版本。

基本上,声明任何您需要的特定版本的内容,并让maven负责其余的事务,直到您需要排除版本或声明特定版本为止。这就是构建maven的目的,所以让它管理依赖关系,直到它做出错误的决定。

票数 4
EN

Stack Overflow用户

发布于 2012-10-21 06:22:34

我认为#1更好,因为从官方的文档中可以清楚地看到,spring-webmvc依赖于所有spring模块。

代码语言:javascript
复制
<!--
    Spring MVC for Servlet Environments (depends on spring-core, spring-beans, spring-context, spring-web)
    Define this if you use Spring MVC with a Servlet Container such as Apache Tomcat (org.springframework.web.servlet.*)
-->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>${org.springframework.version}</version>
</dependency>

您还可以查看pom,以了解spring-webmvc的所有依赖项都依赖于与其所在版本相同的版本。

因此,我认为没有必要在pom中显式地声明它们,至少对于这个用例是这样的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12995163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档