Mys*_*yst 4 java eclipse jar maven
我的情况:
我有2个独立的项目,一个和乙.
我没有自己的项目一个.
A和B使用一些相同的库:
我做的项目Ç,这是项目的一个插件一个,而且还采用了项目乙.
Project 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>
Run Code Online (Sandbox Code Playgroud)
现在我想为项目C制作插件,但我不能.
如果我创建项目D与项目C的依赖项,
它将不会继承项目A的依赖项.
如果我将范围设置为compile但是它会将其变为项目C,这是无用的并且会导致重复.
所以现在我必须使用我制作的每个插件为A和B添加依赖.
编译 - 这是默认范围,如果未指定则使用.编译依赖项在项目的所有类路径中都可用.此外,这些依赖项将传播到依赖项目.
提供 - 这很像编译,但表示您希望JDK或容器在运行时提供依赖关系.例如,在为Java Enterprise Edition构建Web应用程序时,您可以将Servlet API和相关Java EE API的依赖关系设置为提供的范围,因为Web容器提供了这些类.此范围仅在编译和测试类路径中可用,并且不可传递.
为什么不?
有一个确切要求的漏洞:MNG-2205.它目前在Maven版本3的积压中,但我不会满怀希望:它创建于2006年4月(!).
我们不太可能改变所提供范围的行为,但如果我们真的想要这样做,就有可能创建一个新的"提供传递".改变现有范围的定义会有问题.
此外,引用安德鲁·威廉姆斯,仍然从那个错误报告:
如果C想要使用Sybase JConnect,则必须将其声明为依赖项.A可以在任何时候改变它的依赖性并"打破"这种C的假设.
使用未声明的依赖项是错误的.
这个问题没有更好的答案:关于这个主题的文档很清楚:提供的依赖关系目前不具有传递性.最初这样做的原因可能是因为如果你打算使用它,你应该明确声明一个依赖.
| 归档时间: |
|
| 查看次数: |
1465 次 |
| 最近记录: |