如何在maven中默认排除特定库?

时间:2014-09-09 10:56:26

标签: java spring maven frameworks maven-module

我正在编写某种框架,并希望提供一个使用lucene的特定功能(以lucene作为任何功能的示例)。

因此,在我的框架中,我必须maven将lucene库包含为dependency才能构建该功能。

现在我不想为每个功能创建一个子模块,而是将所有内容都打包在一个jar库中。如果用户想要使用lucene-feature,他可能会使用Spring激活它,并且还必须使用maven包含lucene libs。

但我怎么能这样呢?到目前为止,我的框架中有lucene库,如果我将其用作依赖项,即使未使用该功能,也会自动导入lucene libs。我该如何防止这种情况?

1 个答案:

答案 0 :(得分:2)

我猜Maven范围provided可以解决您的问题:

<dependency>
    <groupId>org.apache.lucene</groupId>
    <artifactId>lucene-core</artifactId>
    <version>4.10.0</version>
    <scope>provided</scope>
</dependency>

来自maven documentation

  
      
  • 编译
  •   
     

这是默认范围,如果未指定,则使用此范围。编   依赖项在项目的所有类路径中都可用。   此外,这些依赖项将传播到依赖项目。

     
      
  • 提供
  •   
     

这很像编译,但表示你期望JDK或者   容器在运行时提供依赖性。例如,何时   您可以为Java Enterprise Edition构建Web应用程序   设置对Servlet API和相关Java EE API的依赖   提供范围是因为Web容器提供了这些类。这个   scope仅在编译和测试类路径上可用,并且是   不是过渡性的。

在您的情况下,您不希望容器提供依赖项,但框架的用户不应该包含它(如果需要)。