maven - 如何从 war 中排除整个模块

maven - how to exclude an entire module on from war

我有以下 Maven 项目结构:

sub-projectCsub-projectD 需要有 sub-projectB 作为依赖项。但是sub-projectCsub-projectD构建的war不应该包含sub-projectB的依赖。该 jar 稍后将单独包含在类路径中(这是因为 sub-projectB 是大于 100MB 的大 jar 并且使用 war 将其打包在大小和复制所需的时间方面都非常昂贵war 在部署期间从一个位置到另一个位置。

如何从 sub-projectCsub-projectD 的 war 包中排除 sub-projectB 的依赖项?

一种方法是排除 maven-war-plugin 中的 jar 列表。但是我们必须指定每个 jar 名称或使用通配符。我们不能直接排除一个子模块的依赖。有更简单的方法吗?

这正是范围 provided 的用途。每个具有此范围的依赖项将在编译时使用,但不会包含在最终的 war 中(因为它是由 运行 时间 提供 容器)。

因此,对 sub-projectB 的依赖应该是 sub-projectCsub-projectD pom:

<dependency>
    <groupId>...</groupId>
    <artifactId>sub-projectB</artifactId>
    <version>...</version>
    <scope>provided</scope>
</dependency>