我正在使用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中作为依赖。我的问题是,要遵循的政策,保留,仅排除版本冲突,或排除每一个传递依赖。
我在手册中看不到与此相关的任何内容。
谢谢!
答案 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很苗条......