1

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

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

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

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

4

1 回答 1

3

我想 Maven 范围provided会解决你的问题:

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

来自Maven 文档

  • 编译

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

  • 假如

这很像 compile,但表明您希望 JDK 或容器在运行时提供依赖项。例如,在为 Java 企业版构建 Web 应用程序时,您可以将 Servlet API 和相关 Java EE API 的依赖设置为提供的范围,因为 Web 容器提供了这些类。此范围仅在编译和测试类路径上可用,并且不可传递。

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

于 2014-09-09T11:30:52.820 回答