Maven 解析错误的依赖版本
Maven resolves wrong dependency version
我们的 war 文件不包含 jarfile 的预期快照版本,它包含通过另一个依赖项的旧版本。
简体dependency:tree
war-x.x.x-SNAPSHOT
\- jar1-x.x.x-SNAPSHOT
+- jar2-x.x.x
| +- problemjar-x.x.x
+- jar3-x.x.x-SNAPSHOT
jar3-x.x.x-SNAPSHOT 具有依赖性 "problemjar-x.x.y-SNAPSHOT"(较新版本),但 war 项目构建(和 dependency:tree)包含 "problemjar-x.x.x" 来自 "jar2-x.x.x".
目前,我们 "exclude" "problemjar-x.x.x" "jar2-x.x.x"。
但很高兴知道这种行为的原因,恕我直言,排除只是一种解决方法。
备注:
- "jar3-x.x.x-SNAPSHOT" 中的依赖项 "problemjar-x.x.y-SNAPSHOT" 是 不是 "provided".
- Maven版本为3.2.5
- 上面简化的dependency:tree中的级别是正确的,所以旧版本的路径不短于新SNAPSHOT版本的路径
编辑:项目结构
war 和 jar1 是一个父 pom 的子项,简化的 dependency:tree 来自 war 项目,该项目将 jar1 项目作为依赖项。其他是 normal/external 依赖项,从 war 项目中可以看出,它也适用于 jar1。
确保以下几点:
1) 每个子模块都应该从它的父模块中获取它的版本,即没有 <version>
标签只有一个包含版本的 <parent>
标签。
2) 当您从同一项目调用依赖项时,请始终按如下方式执行:
<version>${project.version}</version>
Maven 不会 从依赖关系树中获取最新版本。
它采用最近的版本,在您的情况下,这是它遇到的第一个版本。
如果要强制Maven采用特定版本,最好使用<dependencyManagement>
而不是排除。
我们的 war 文件不包含 jarfile 的预期快照版本,它包含通过另一个依赖项的旧版本。
简体dependency:tree
war-x.x.x-SNAPSHOT
\- jar1-x.x.x-SNAPSHOT
+- jar2-x.x.x
| +- problemjar-x.x.x
+- jar3-x.x.x-SNAPSHOT
jar3-x.x.x-SNAPSHOT 具有依赖性 "problemjar-x.x.y-SNAPSHOT"(较新版本),但 war 项目构建(和 dependency:tree)包含 "problemjar-x.x.x" 来自 "jar2-x.x.x".
目前,我们 "exclude" "problemjar-x.x.x" "jar2-x.x.x"。
但很高兴知道这种行为的原因,恕我直言,排除只是一种解决方法。
备注:
- "jar3-x.x.x-SNAPSHOT" 中的依赖项 "problemjar-x.x.y-SNAPSHOT" 是 不是 "provided".
- Maven版本为3.2.5
- 上面简化的dependency:tree中的级别是正确的,所以旧版本的路径不短于新SNAPSHOT版本的路径
编辑:项目结构
war 和 jar1 是一个父 pom 的子项,简化的 dependency:tree 来自 war 项目,该项目将 jar1 项目作为依赖项。其他是 normal/external 依赖项,从 war 项目中可以看出,它也适用于 jar1。
确保以下几点:
1) 每个子模块都应该从它的父模块中获取它的版本,即没有 <version>
标签只有一个包含版本的 <parent>
标签。
2) 当您从同一项目调用依赖项时,请始终按如下方式执行:
<version>${project.version}</version>
Maven 不会 从依赖关系树中获取最新版本。
它采用最近的版本,在您的情况下,这是它遇到的第一个版本。
如果要强制Maven采用特定版本,最好使用<dependencyManagement>
而不是排除。