Maven的POM参考说明如下:
提供 - 这很像编译,但表示你期望的 JDK或提供它的容器 运行。它只适用于 编译和测试类路径,和 不具传递性。
...
系统 - 此范围类似于提供的,但您必须 提供包含它的JAR 明确。工件总是如此 可用,并没有查找 库中。
我现在已将具有大量“系统”依赖关系的项目转换为“提供”。但是,似乎系统依赖性是可传递的,这使得它们与提供的非常不相似,并且现在在我的构建中导致许多缺少的依赖项。我的问题有两个:
答案 0 :(得分:2)
传递依赖项将始终是程序集的一部分。无法陈述您的意图行为。
问题是:为什么一个项目打算包含在其他项目中(如你所说的那样,意图具有传递依赖性)一个程序集?通常,具有WAR程序集的项目不会作为依赖项包含在其他项目中(WAR依赖项根本不提供它们的传递依赖项,因为它们仅用于WAR覆盖)。
如果这是一个maven组件,这很简单。 Maven Assembly插件已“排除”以过滤必须复制的文件。
如果这是WAR-Project,你可以从WAR中排除一些JAR,但不包括:
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<packagingExcludes>WEB-INF/lib/*-[toExclude1]-*.jar,WEB-INF/lib/[toExclude2]*.jar</packagingExcludes>
</configuration>
</plugin>