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

时间:2011-02-11 13:54:25

标签: maven

Maven的POM参考说明如下:

  

提供 - 这很像编译,但表示你期望的   JDK或提供它的容器   运行。它只适用于   编译和测试类路径,和   不具传递性

     

...

     

系统 - 此范围类似于提供的,但您必须   提供包含它的JAR   明确。工件总是如此   可用,并没有查找   库中。

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

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

1 个答案:

答案 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>