Maven的"系统"范围是否可传递,但"提供"不是吗?

And*_*yff 10 maven

Maven的POM参考说明如下:

提供 - 这很像编译,但表示您希望JDK或容器在运行时提供它.它仅在编译和测试类路径中可用,并且 不可传递.

...

system - 此范围与提供的类似,只是您必须提供明确包含它的JAR.工件始终可用,并且不会在存储库中查找.

我现在已经将具有许多"系统"依赖关系的项目转换为"提供".但是,似乎系统依赖性是可传递的,这使得它们与提供的非常不相似,并且现在在我的构建中导致许多缺少的依赖项.我的问题是双重的:

  1. 系统范围是否可传递?如果是这样,Maven引用是错误还是不完整?
  2. 有没有办法让依赖项传递,而不将它们打包到最终的程序集中?

Mar*_*eln 2

传递依赖项将始终是程序集的一部分。没有范围来陈述您的意图行为。

问题是:为什么有一个旨在包含在其他项目中的项目(正如您所说的旨在具有传递依赖项)程序集?通常,具有 WAR 程序集的项目不会作为依赖项包含在其他项目中(WAR 依赖项根本不提供其传递依赖项,因为它们仅用于 WAR 覆盖)。

如果这是一个 Maven 组件,这很简单。Maven Assembly 插件具有“排除”功能来过滤必须复制的文件。

如果这是一个 WAR 项目,您可以使用以下排除项从 WAR 中排除一些 JAR:

<plugin>
  <artifactId>maven-war-plugin</artifactId>
  <configuration>
      <packagingExcludes>WEB-INF/lib/*-[toExclude1]-*.jar,WEB-INF/lib/[toExclude2]*.jar</packagingExcludes>
  </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)