我正在编写某种框架,并希望提供一个使用lucene
的特定功能(以lucene作为任何功能的示例)。
因此,在我的框架中,我必须maven
将lucene库包含为dependency
才能构建该功能。
现在我不想为每个功能创建一个子模块,而是将所有内容都打包在一个jar库中。如果用户想要使用lucene-feature,他可能会使用Spring
激活它,并且还必须使用maven包含lucene libs。
但我怎么能这样呢?到目前为止,我的框架中有lucene库,如果我将其用作依赖项,即使未使用该功能,也会自动导入lucene libs。我该如何防止这种情况?
答案 0 :(得分:2)
我猜Maven范围provided
可以解决您的问题:
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>4.10.0</version>
<scope>provided</scope>
</dependency>
- 的编译强>
这是默认范围,如果未指定,则使用此范围。编 依赖项在项目的所有类路径中都可用。 此外,这些依赖项将传播到依赖项目。
- 的提供强>
这很像编译,但表示你期望JDK或者 容器在运行时提供依赖性。例如,何时 您可以为Java Enterprise Edition构建Web应用程序 设置对Servlet API和相关Java EE API的依赖 提供范围是因为Web容器提供了这些类。这个 scope仅在编译和测试类路径上可用,并且是 不是过渡性的。
在您的情况下,您不希望容器提供依赖项,但框架的用户不应该包含它(如果需要)。