【问题标题】:How can I expect maven to resolve dependencies required by the child jar?我如何期望 maven 解决子 jar 所需的依赖项?
【发布时间】:2015-05-02 09:37:53
【问题描述】:

我有一个父项目(有自己的 pom.xml),我在其中将子项目作为一个带有自己的 pom.xml 的 jar 导入。 在父 pom.xml 中,我已将我的子 jar 指定为依赖项 - 这已解决,但我希望 maven 解决我的子 jar 所需的依赖项。

我要复制的用例: 当我包含 spring-web-mvc.jar 时,传递依赖项会自动解决。 我有一个类似的要求,我将 child.jar 包含到主框架项目中并期望传递依赖项得到解决(注意:child.jar 未托管,它被打包为 jar 并存在于本地文件系统上)

当前结构:

子项目:

|----/src/main/java
|----/src/main/资源
|----child-pom.xml

>This child project will be a jar as dependency in the parent project  

父项目

|----/src/main/java
|----/src/main/资源
|----/src/main/webapp/WEB-INF/lib/child.jar
|---- parent-pom.xml

问题
当我从父项目创建战争时,我希望所有依赖项(包括传递的依赖项)都显示在 WEB-INF 库中。

目前这没有发生。

【问题讨论】:

  • 请您发布您的 pom(s).xml
  • 您的依赖项应该在那里。请发布你的 pom。

标签: maven


【解决方案1】:

首先,当谈到父/子 Maven 项目时,通常您在一个公共父项目中将您的“子”指定为 modules,该项目本身与包装类型 pom 一起打包,而不是使它们成为父项目的依赖项项目。

当涉及到您的“孩子”或通常的“您的依赖项的依赖项”的依赖项时,这些被称为传递依赖项,并且在此处的官方文档中得到了很好的解释:http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

解决这些传递依赖是 Maven 的核心优势之一,并且默认情况下得到保证,除非它们导致导致构建失败的冲突。

这里有两件事可以帮助你仔细研究强制插件 (http://maven.apache.org/enforcer/maven-enforcer-plugin/) 和着色器插件 (http://maven.apache.org/plugins/maven-shade-plugin/) .... 以及 corse 的官方文档(阅读整个内容只需不到一天 - 然后在特定主题上为您提供进一步支持,而如果您已经有 pom.xml 文件并且您被困在某个地方,我们也很乐意为您提供进一步支持。

虽然enforcer-plugin 涵盖了有关相同工件的不同版本的某些冲突,但着色器插件只会将您指定的所有内容打包到一个jar 中以进行逆向工程(这不是正常的用例,但如果我是的话,我有时会这样使用它不绝对确定我的最终档案的结尾)。

另外值得一看的是 maven 发行版中已经提供的依赖插件 - mvn dependency:tree -Dverbose 将为您提供有关已解决依赖项(可能还有版本冲突)的非常详细的信息。

【讨论】:

  • 感谢 user1902288 的洞察力。我已经更新了问题
  • 你在运行时得到 ClassNotFound-Exceptions 还是实际问题是什么?因为无论它的第 3 方还是您自己的依赖机制都将解决传递依赖(并且可能会因为存在版本冲突而抑制某些依赖 - 例如,您的两个直接依赖依赖于同一个 groupId:Artefact(“Artefact”)但在不同的版本。(除非所说的 child.jar 本身不是来自 Maven 项目/构建 - 例如不是 Maven Artefact)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
  • 1970-01-01
  • 2012-01-12
  • 1970-01-01
相关资源
最近更新 更多