如何为不同子模块的可分发程序集中提供的库配置 MVN POM 文件



在搜索了所有相关帖子后,我仍然无法找到确切问题的答案,所以我希望这里有人可以帮助我。

我有一个包含 3 个模块的项目,其中 2 个模块使用相同的"基本"模块。 每个模块必须部署到具有不同提供的库的不同服务器。

它看起来像这样:

Project
|
-- Modules
|
-- Module Base
|
-- Module A
|
-- Module B
pom file of Project has dependency managment where library 1 is declared with version 1.0
pom file of Module Base has dependency on library 1.
pom file of Module A has dependency on Module Base.
pom file of Module B has dependency on Module Base.
Module A is deployed on a server X where library 1 is provided.
Module B is deployed on a server Y where library 1 is NOT provided.
On server X the size of Module A must be kept as small as possible, so library 1 cannot end up in the distributable of Module A.

我应该如何配置 pom 文件以使所有内容正确构建和运行?

我已经尝试了一大堆可能性,但无法正确处理,因此 A 的程序集不存在库 1,而 B 的程序集确实存在库 1。

所有的帮助将不胜感激。

嗯,这在很大程度上取决于现实中的内容取决于什么。您在POM中声明的内容可能代表也可能不代表现实。由于我不知道,我只给你你拥有的选项:


选项 1

将对library 1的依赖关系从Module Base移动到Module A。由于您希望module B能够使用Module Base但没有library 1这可能意味着Module Base实际上不需要library 1

选项 2

如果不是上述情况,并且Module Base有时确实需要library 1,但有时可以在没有它的情况下工作 - 您应该使依赖项可选。然后,您可以将其添加到Module A而不是将其添加到Module B

选项 3

在奇怪的情况下,当library 1Module Base不是可选的,但您碰巧以某种方式知道Module B不会触及需要库Module Base的代码 - 当您定义对Module Base的依赖时,排除对library 1的依赖Module B


有关选项 2 和 3 的更多信息,请查看"可选和排除依赖项"文档。

更新:

在澄清注释之后,似乎所有模块都需要library 1,区别仅在于运行时是否提供。在这种情况下,您需要将依赖项从Module Base复制到Module A,并将依赖项范围更改为providedforModule A。这样,假设您的打包机制理解 Maven 作用域,Module B将通过Module Base使用compile作用域,因此library 1将被添加到最终包中,而Module A会知道它已提供并且不应该在包中。

相关内容

最新更新