Maven是否需要显式指定Spring/Hibernate依赖的依赖项?

Maven是否需要显式指定Spring/Hibernate依赖的依赖项?,spring,hibernate,maven,dependencies,Spring,Hibernate,Maven,Dependencies,我是Maven的新手,我尝试在我的项目中使用Maven和Spring、Hibernate。在浏览了Spring和Hibernate参考之后,我发现“没有必要在POM.xml文件中为此类Apache commons库显式指定依赖的库” 我的问题是:如果我的项目的其他部分引用Apache commons库,比如commons io,我是否应该在POM.xml文件中明确指定此依赖关系?Maven用于避免必须运行依赖于其他JAR文件的JAR文件的问题。当然,您不必使用maven来实现这一点,但您应该这样

我是Maven的新手,我尝试在我的项目中使用Maven和Spring、Hibernate。在浏览了Spring和Hibernate参考之后,我发现“没有必要在POM.xml文件中为此类Apache commons库显式指定依赖的库”


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

Maven用于避免必须运行依赖于其他JAR文件的JAR文件的问题。当然,您不必使用maven来实现这一点,但您应该这样做。Maven将自动下载所需JAR文件的依赖JAR文件。例如,hibernate实体管理器JAR文件有100多个依赖项,maven为您完成这项工作


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

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


您不应该担心在pom.xml中定义的库的依赖关系。Maven会帮你做的。

你可以在一个网站上提供一个库名,看看它依赖于什么(例如,如果是库,请看一个名为“此工件依赖于…”的部分)。这些依赖项(您的工件所依赖的)被调用。您不必在pom.xml中指定它们,因为maven将为您解析它们。

为了可读性,您应该只在模块中声明您直接依赖的依赖项。您希望JUnit测试您的软件,只需声明JUnit;您需要hibernate来使用ORM、声明hibernate等等。剩下的留给马文

大多数情况下,你应该说明你打算在你想使用它的模块中使用什么。因此,如果您想在多个模块中使用依赖项,请考虑将其移入父POM中的依赖项管理块,并从您想要的模块中引用它。p> 父pom.xml

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

朱尼特
朱尼特
4.10
测试
子pom.xml

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

朱尼特
朱尼特

这保证了版本的稳定性,并且仍然允许您仅通过查看模块的pom(而不是到处查看)来了解模块使用了什么。

因此,这是否意味着如果我编写的代码直接引用公共io,那么它们应该在pom.xml中显式定义,即使Spring也可能依赖于公共io,如果我的代码直接依赖的commons io版本与使用的spring版本不同。maven会怎么做?将下载两个版本,还是选择最新版本?谢谢!!第一条评论是肯定的。第二个注释-如果版本冲突,Maven会自动选择最新版本。