【问题标题】:Does Maven need to explicitly specify the dependency that Spring/Hibernate dependented?Maven 是否需要明确指定 Spring/Hibernate 依赖的依赖项?
【发布时间】:2013-04-07 02:29:15
【问题描述】:

我是 Maven 新手,我尝试在我的项目中使用 Maven 和 Spring、Hibernate。在查看 Spring 和 Hibernate 参考后,我发现“不需要在 POM.xml 文件中为此类 Apache 公共库显式指定依赖库”。

我的问题是:如果我的项目的其他部分引用了 Apache commons 库,例如 commons-io,我应该在 POM.xml 文件中明确指定此依赖项吗?

【问题讨论】:

    标签: spring hibernate maven dependencies


    【解决方案1】:

    Maven 用于避免不得不运行依赖于其他 JAR 文件的 JAR 文件的问题。当然,您不必使用 maven 来执行此操作,但您应该这样做。 Maven会自动下载你需要的JAR文件的依赖JAR文件。例如,hibernate-entity manager JAR 文件有 100 多个依赖项,而 maven 会为您完成这项工作。

    无论如何,即使你确实将commons-io文件添加到maven项目的构建路径/类路径中,然后更新项目配置,maven也会将其踢出。

    【讨论】:

      【解决方案2】:

      您应该在项目使用的 Maven 中定义这些依赖项。例如,即使某些库依赖于 commons-io,但如果您的代码需要它,那么您应该直接在 pom.xml 中定义 commons-io

      您不必担心您在 pom.xml 中定义的库的依赖关系。 Maven 会为你做到这一点。

      【讨论】:

      • 那么是不是说我写的代码如果直接引用common-io,就应该在POM.xml中明确定义,即使Spring也可能依赖common-io?跨度>
      • 更进一步,如果我的代码直接依赖的commons-io版本与使用的弹簧不同。 maven 会做什么?两个版本都会下载还是选择最新版本?谢谢!!
      • 第一个评论是。第二条评论 - 如果版本冲突,Maven 会自动选择最新版本。
      【解决方案3】:

      您可以在 mvnrepository.com 之类的网站上提供库名称,以查看它依赖于什么(例如,在 spring-webmvc 库的情况下,查看名为“此工件依赖于...”的部分)。这些依赖项(您的工件所依赖的)称为transitive dependencies。您不必在 pom.xml 中指定这些,因为 maven 会为您解析它们。

      【讨论】:

        【解决方案4】:

        为了便于阅读,您应该只在您的模块中声明那些您直接依赖的依赖项。你想让 JUnit 测试你的软件,只声明 JUnit;你需要hibernate才能使用ORM,声明hibernate等等。剩下的交给 Maven。

        而且大多数情况下,您应该在要使用它的模块中说明您打算使用的内容。因此,如果您想在多个模块中使用依赖项,请考虑将其移动到一个 dependencyManagement 块中父 pom 并在您想要的模块中从那里引用它。

        父 pom.xml

        <dependencyManagement>
           <dependencies>
              <dependency>
                 <groupId>junit</groupId>
                 <artifactId>junit</artifactId>
                 <version>4.10</version>
                 <scope>test</scope>
              </dependency>
           </dependencies>
        </dependencyManagement>
        

        子 pom.xml

        <dependencies>
           <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
           </dependency>
        </dependencies>
        

        这保证了您的版本稳定性,并且仍然允许您通过仅查看它的 pom(而不是所有地方)来找出模块使用的内容。

        【讨论】:

          猜你喜欢
          • 2021-08-22
          • 2019-09-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-22
          相关资源
          最近更新 更多