猿问

为什么在 pom.xml / maven 中有排除依赖项的选项?

我一直在阅读POM 简介,但不明白以下内容。在 pom.xml 中你可以配置依赖,假设我们配置依赖maven-embedder。然后您可以排除您的依赖项的依赖项,假设我们maven-core要从maven-embedder依赖项中排除。在什么情况下你想这样做?如果它没有所有依赖项,那不会导致您的依赖项停止工作吗?我显然在这里错过了一块拼图:)


  <dependencies>

    <dependency>

      <groupId>org.apache.maven</groupId>

      <artifactId>maven-embedder</artifactId>

      <version>2.0</version>

      <exclusions>

        <exclusion>

          <groupId>org.apache.maven</groupId>

          <artifactId>maven-core</artifactId>

        </exclusion>

      </exclusions>

    </dependency>

    ...

  </dependencies>

示例:https ://maven.apache.org/pom.html#Exclusions


holdtom
浏览 301回答 2
2回答

温温酱

这里的诀窍是您可能想要使用传递依赖项的另一个版本,而不是默认版本。换句话说,您可能会替换甚至禁用某些默认行为部分。

慕盖茨4494581

也许一个例子会有所帮助。我们最近有一个用例。我们的一个依赖项(它非常大,但我们只需要几个独立的方法)对Rhino有依赖项,但我们不会靠近代码中涉及 Rhino 的部分。在我们的模块中,我们包括YUI Compressor。无论出于何种原因,这两个库都具有完全相同的完全限定类名,但方法签名略有不同。结果是包括 Rhino 的传递依赖破坏了以前工作的功能。YUI Compressor 引发了运行时异常,因为该方法的签名与预期的不同。解决方案是明确排除 Rhino。通常,您不必排除依赖项。它通常是由于设计不良的模块造成的。例如,如果一个模块变得太大,那么大多数用户可能只需要他们的一小部分类或方法,因此并非严格要求他们的所有依赖项。在这种情况下,库设计者可能应该将模块分解为一组更小的模块。在两个不同的库中拥有相同的完全限定类名似乎也是一个糟糕的设计决策。
随时随地看视频慕课网APP

相关分类

Java
我要回答