【问题标题】:How to find out why a jar was included by Maven?如何找出为什么 Maven 包含一个 jar?
【发布时间】:2011-06-03 15:00:44
【问题描述】:

我们将 Maven 3 与 IntelliJ 一起用于我们的 IDE。编译后,我们得到一堆 spring 2.0 的东西被包含在外部库中。如果我查看 Intellij 中的 Maven 项目依赖项,我看不到任何人依赖于 spring 2.0,所以我怀疑这是我们依赖的东西。

我的问题是我将如何追踪它?我尝试执行mvn dependency:tree -Dverbose -Dincludes=spring-aop 甚至-Dincludes=spring,但是从我知道使用spring 的根目录或子模块目录运行时没有得到任何结果。

【问题讨论】:

    标签: java spring maven intellij-idea maven-3


    【解决方案1】:

    看起来传递给-Dincludes 的模式不正确。

    根据Maven Dependency Plugin 的文档,-Dincludes 的语法StrictPatternIncludesArtifactFilter 定义。来自 AbstractStrictPatternArtifactFilter 的 javadoc,这是子类的子类,

    工件模式语法是 形式:

    [groupId]:[artifactId]:[type]:[version]

    其中每个模式段都是可选的,并且支持完整和 部分 * 通配符。一个空的模式 段被视为隐式 通配符。

    例如,org.apache.* 将匹配其组的所有工件 id 以org.apache. 开头,:::*-SNAPSHOT 将匹配所有快照 人工制品。

    也许你应该在没有-Dincludes 的情况下运行mvn dependency:tree,看看它是否显示了 spring 2.0 相关的依赖项。或者,为-Dincludes 指定适当的模式。

    【讨论】:

      【解决方案2】:

      您搜索的格式错误。试试这个:

      mvn dependency:tree -Dverbose -Dincludes=:spring*::
      

      (搜索任何具有以 spring 开头的 groupId 的工件)

      或者这个:

      mvn dependency:tree -Dverbose -Dincludes=org.springframework
      

      (使用 artifactId org.springframework 搜索任何工件)

      【讨论】:

      • 我尝试使用上述命令,以了解为什么包含特定 jar。但是,上面的 maven 命令正在执行并说构建成功,但没有关于依赖关系的信息。
      【解决方案3】:

      为什么不使用 intellij 并轻松修复它。 打开您的 pom.xml,右键单击(调用上下文菜单)并选择 UML > 显示依赖项(假设您启用了 UML 插件)。 Idea 将标记所有重复的依赖项,您可以使用 ALT+Enter 组合排除依赖项。 @也可以看看: http://blogs.jetbrains.com/idea/2010/05/maven-dependencies-diagram/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-20
        • 1970-01-01
        • 2013-03-18
        • 1970-01-01
        • 1970-01-01
        • 2015-04-19
        • 2017-04-07
        相关资源
        最近更新 更多