2011-02-11 50 views
10

以下Maven的POM参考状态:Maven的'系统'范围是可传递的,但'提供'不是?

提供 - 这很像编译,而是指你所期望的 JDK或容器在 运行时提供。它仅在 编译和测试类路径中可用,而 不是可传递的

...

系统 - 这个范围类似于为,除了你必须 提供包含它 明确的JAR。工件始终可用 ,在 存储库中不会查找该工件。

我现在已经将一个有很多'系统'依赖关系的项目转换为'provided'。但是,看起来系统依赖关系是可传递的,这使得它们与提供的非常不相似,并且现在在我的构建中导致很多缺失的依赖关系。我的问题是双重的:

  1. 是系统范围传递?如果是这样,Maven的参考是错误还是不完整?
  2. 有没有办法使依赖性传递,而不将它们打包到最终的程序集?
+1

你所说的“make依赖传递”是什么意思? (就系统范围而言,其理由是“系统依赖关系对解决现在由JDK提供的工件的依赖性特别有用,但在早期单独下载时可用”......这对我来说绝对没有意义,因为您需要一旦它由JDK提供,就改变POM,所以不妨改变提供的范围。) – 2012-08-07 12:22:58

回答

2

传递依赖将永远是程序集的一部分。没有范围陈述你的意图行为。

现在的问题是:为什么有一个项目被包含在其他项目中(正如你所说明的那样有传递依赖关系的意图)一个程序集?通常,具有WAR-assembly的项目不会作为依赖项包含在其他项目中(WAR-依赖项根本不提供它们的传递依赖项,因为它们仅用于WAR叠加层)。

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

如果这将是一个WAR项目,你可以排除WAR一些罐子这些不包括:

<plugin> 
    <artifactId>maven-war-plugin</artifactId> 
    <configuration> 
     <packagingExcludes>WEB-INF/lib/*-[toExclude1]-*.jar,WEB-INF/lib/[toExclude2]*.jar</packagingExcludes> 
    </configuration> 
</plugin> 
相关问题