三个maven项目A依赖B,B依赖C,如何让C在编译时对A不可见?

Three maven project A depends on B, B depends on C, how to make C invisible to A on compile time?

在 Web 应用程序中,我的项目 A(前端)依赖于项目 B(业务层)。

项目 B 依赖于项目 C(存储库层)。

因此,位于项目C(Repo)中的class可以在项目A(Front)中实例化。但显然我不想要这个。

我试图在项目 A pom.xml 中声明排除以排除项目 C,同时声明对项目 B 的依赖 - 但是当 WAR 构建时,项目的 C jar 被排除在外最后的WAR。

如何在编译时而不是在 WAR 构建时或运行时从项目 a 中排除项目 C?

您或许可以使用排除,并在范围为 runtime 的 A 的 pom 中添加对 C 的显式依赖。这样,它就不会在编译类路径中,而应该在 war 文件中。

项目 A 应将项目 B 视为依赖项,但应将项目 C 排除在外。然后 WAR 的构建可以手动重新包含项目 C.

这是一个包含排除项的示例依赖项。

    <dependency>
        <groupId>xom</groupId>
        <artifactId>xom</artifactId>
        <type>jar</type>
        <optional>true</optional>
        <exclusions>
            <exclusion>
                <artifactId>xalan</artifactId>
                <groupId>xalan</groupId>
            </exclusion>
            <exclusion>
                <artifactId>xercesImpl</artifactId>
                <groupId>xerces</groupId>
            </exclusion>
            <exclusion>
                <artifactId>xml-apis</artifactId>
                <groupId>xml-apis</groupId>
            </exclusion>
        </exclusions>
    </dependency>