2

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

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

4

4 回答 4

1

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

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

于 2013-04-15T04:41:52.310 回答
0

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

于 2013-04-15T07:33:22.867 回答
0

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

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

父 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(而不是所有地方)来找出模块使用的内容。

于 2013-04-15T07:52:10.570 回答
0

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

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

于 2013-04-15T03:54:08.440 回答