Maven排除最佳实践

时间:2011-05-06 08:13:24

标签: maven-2 maven maven-3 dependency-management

我正在使用Maven2。当我查看mvn dependency:tree -Dverbose的输出时,我看到很多:

[INFO] +- org.springframework:spring-orm:jar:3.0.5.RELEASE:compile
[INFO] |  +- (org.springframework:spring-beans:jar:3.0.5.RELEASE:compile - omitted for duplicate)
[INFO] |  +- (org.springframework:spring-core:jar:3.0.5.RELEASE:compile - omitted for duplicate)
[INFO] |  +- (org.springframework:spring-jdbc:jar:3.0.5.RELEASE:compile - omitted for duplicate)
[INFO] |  \- (org.springframework:spring-tx:jar:3.0.5.RELEASE:compile - omitted for duplicate)

所有这些都被包含在我的pom中作为依赖。我的问题是,要遵循的政策,保留,仅排除版本冲突,或排除每一个传递依赖。

我在手册中看不到与此相关的任何内容。

谢谢!

3 个答案:

答案 0 :(得分:2)

对于maven来说,双重依赖是没有问题的 - 所以你可以保持原样。 (其他所有文物都取决于apache.logging - 你不需要担心,maven会照顾你)

您只需要解决版本混淆,或者您可以省略将在运行环境中提供的依赖。

最佳做法是(如krosenvold所述):

  

包含任何包含a的依赖项   直接的java类文件   您的代码引用。任何课程   从您的来源引用   应该定义。

并且不要担心依赖树的双重性

答案 1 :(得分:1)

(至少)应包含任何包含您的代码直接引用的java类文件的依赖项。因此,应该定义从源引用的任何类。

这会创建依赖定义的某种封装;您的项目负责定义自己的依赖项,并再次定义依赖项。这是mvn依赖的东西:analyze告诉你。

最大值略微不明确,通常由需求驱动。几个库可以依赖于第三个库的不同版本。在这种情况下,你可以压制其中一个或只是在你的pom中包含正确的一个。您自己的pom中的版本优先。

有时您只需要包含一些内容即可获得相应的版本(数据库驱动程序会浮现在脑海中)。

但是最小依赖列表是明确定义的。

答案 2 :(得分:0)

在你给出的情况下,你只需要给出依赖,这意味着只给org.springframework的一个依赖:spring-orm:jar:3.0.5.RELEASE:编译但不能用于其他的。这将使你的pom很苗条......