为什么Maven不继承provided依赖项?
我的情况:
我有两个独立的项目A和B。
我不拥有项目A。
A和B使用了一些相同的库:
- reflections-0.9.9-RC1.jar
- guava-11.0.2.jar
- xml-apis-1.0.b2.jar
- javassist-3.16.1-GA.jar
- dom4j-1.6.1.jar
- jsr305-1.3.9.jar
我创建了项目C,它是项目A的插件,但也使用了项目B。
项目C的pom.xml文件:
<dependencies>
<dependency>
<groupId>com.a</groupId>
<artifactId>a</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.b</groupId>
<artifactId>b</artifactId>
<version>1.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.2</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
现在我想为项目C创建插件,但我无法做到。
如果我创建一个依赖于项目C的项目D,
它不会继承依赖于项目A的依赖项。
如果我将范围设置为
compile
,它会被遮蔽到项目C中,这是没有用处的,并且会导致重复。
所以现在我必须为我制作的每个插件都添加对A和B的依赖。
Compile-这是默认范围,如果未指定,则使用该范围。编译依赖项在项目的所有类路径中都可用。此外,这些依赖关系会传播到相关项目。
Provided-这与compile非常相似,但表示您期望JDK或容器在运行时提供依赖项。例如,在为Java Enterprise Edition构建Web应用程序时,您将把依赖项设置为提供的范围,因为Web容器提供了这些类。此范围仅在编译和测试类路径上可用,并且不是传递性的。
为什么呢?