gpt4 book ai didi

java - 如何使用已标记为已提供的项目的依赖项?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:24:55 27 4
gpt4 key购买 nike

我有以下场景,经过简化:

projectX  ---> projectA ---> projectB

---> 表示“取决于”。

ProjectB 非常简单。它没有声明任何依赖项。事实上,唯一相关的部分是:

<packaging>jar</packaging>

在 projectA 的 pom.xml 中,我声明了对 projectB 的依赖:

<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>projectB</artifactId>
<version>1.0.0</version>
<scope>provided</scope>
</dependency>
</dependencies>

在 projectX 的 pom.xml 中我有:

<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>projectA</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies>

问题是 projectX 需要使用在 projectB 中定义的组件(类等)。如果我将 projectA 中的范围更改为对 projectB 使用 compile,一切都会正常,但是当在 projectX 中生成 war 时,projectB 将被包含在内,我需要将这个库从生成的 war 中移除,因为我在项目的其他部分提供 projectB。

在实际场景中,我有几个依赖项,如 projectB 会影响 projectA,所以为了减少生成的 war 的大小,我想按提供的方式设置它们,但是 projectX 不能使用任何这些库中定义的组件.组件示例:Spring、Hibernate等

问题:有没有一种方法可以以干净的方式实现这一点,而无需在很多地方重新声明依赖项?

最佳答案

The problem is that projectX needs to use components (classes and such) that are defined in projectB.

然后 ProjetB 应该确实是 ProjectX 的依赖项,在 provided 范围内,再次。重新声明依赖关系会改变 Maven 将其作为传递依赖关系处理的方式(也就是说,您可以通过说:我希望在我的项目中具有此范围的此依赖关系来覆盖其行为)。

but then projectB will be included when generating the war in projectX, and I need to have this library out of the generated war

provided 范围内重新声明它不会发生这种情况。或者,您可以将 ProjectA 中的 ProjectB 的范围更改为 compile,然后配置 maven-war-plugin排除它们,使用 inclusions/exclusions .
不过,在这样做之前,您应该仔细检查为什么在语义上(或需求方面)ProjectB 在 ProjectA 中设置为 provided 以及它对其他消费者项目的影响。


更新
以上两种方法都可以满足您的需求。或者,正如评论中所建议的那样,从长远来看,进一步的选择可能更加可持续和明确,以实现更好的治理和维护(集中化):

  • 使用通用的 parent pom您可以在其中声明共享依赖项列表,即所有子项目将使用的依赖项,定义(和维护)一次。
  • 使用dependencyManagement ProjectX 中的部分更改方式 Maven dependencies mediation将处理对 ProjectA 的传递依赖,而不更改 ProjectA 或 ProjectB(类似于此答案顶部的选项 1,其中 the difference 仅在依赖项进入范围时应用,否则忽略)。同样,要集中此管理,最好在一个共同的父级中进行(上述选项)。

关于java - 如何使用已标记为已提供的项目的依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36875639/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com