【问题标题】:How to exclude specific libraries by default in maven?如何在 Maven 中默认排除特定库?
【发布时间】:2014-09-09 10:56:26
【问题描述】:

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

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

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

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

【问题讨论】:

  • Maven 范围 provided 不是您要找的?

标签: java spring maven frameworks maven-module


【解决方案1】:

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

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

来自maven documentation

  • 编译

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

  • 提供

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

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

【讨论】:

    猜你喜欢
    • 2013-03-08
    • 1970-01-01
    • 2017-07-29
    • 2021-02-14
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    相关资源
    最近更新 更多