我一直在读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>发布于 2018-11-13 10:22:41
举个例子也许会有帮助。我们最近有个用例。
我们的依赖(相当大,但我们只需要几个独立的方法)依赖于犀牛,但是我们不会接近Rhino接触代码的部分。
在我们的模块中,我们包括YUI压缩机。无论出于什么原因,这两个库都具有完全相同的完全限定类名,但方法签名略有不同。
其结果是,将Rhino的传递依赖包含在内,破坏了以前起作用的功能。YUI压缩程序抛出了一个运行时异常,因为该方法的签名与预期不同。
解决办法是明确排除犀牛。
一般来说,您不应该排除依赖关系。它通常是由于设计不当的模块而产生的。
例如,如果一个模块变得太大,那么大多数用户可能只需要其类或方法的一小部分,所以并不是所有的依赖项都是严格要求的。在这种情况下,库设计人员可能应该将模块分解为一组较小的模块。
在两个不同的库中使用相同的完全限定类名似乎也是一个糟糕的设计决策。
发布于 2018-11-13 10:22:40
这里的诀窍是,您可能希望使用另一个版本的传递依赖项,而不是默认的依赖项。换句话说,您可能会替换或甚至禁用某些默认的行为部分。
https://stackoverflow.com/questions/53278552
复制相似问题