【发布时间】:2015-06-11 03:46:55
【问题描述】:
最近我一直在对一个前段时间开发的项目进行一些改进,这就是我的发现。 pom 文件中的许多依赖项都没有指定版本,但它们已被解决。该项目由 1 个根模块和 2 个子模块组成。使用了聚合器模式,这意味着根本没有依赖管理部分。上层项目只是聚合了 2 个模块,仅此而已。子项目不将其称为父项。他们有不同的父母。我无法理解的是,子项目本身和它们的父项目(事实上,它也没有dependencyManagement)都没有为某些依赖项指定版本。例如:
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>imap</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
有人可以帮我解决这个问题吗? maven 是否使用一些默认策略处理版本控制?默认策略是什么?
【问题讨论】:
-
如果不定义工件的版本,maven 是不可能工作的。它们应该在子模块或父模块中的
dependencyManagement标记中的某处定义。请检查您的 pom 层次结构。使用 mvn help:effective-pom -
你有没有通过
mvn help:effective-pom -Doutput=result.xml检查过,看看有没有dependencyManagement。 -
可以从某个地方传递引用它们吗?这将是最坏的情况,因为您对自己的版本一无所知。