在搜索了所有相关帖子后,我仍然无法找到确切问题的答案,所以我希望这里有人可以帮助我。
我有一个包含 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 1
对Module Base
不是可选的,但您碰巧以某种方式知道Module B
不会触及需要库Module Base
的代码 - 当您定义对Module Base
的依赖时,排除对library 1
的依赖Module B
有关选项 2 和 3 的更多信息,请查看"可选和排除依赖项"文档。
更新:
在澄清注释之后,似乎所有模块都需要library 1
,区别仅在于运行时是否提供。在这种情况下,您需要将依赖项从Module Base
复制到Module A
,并将依赖项范围更改为provided
forModule A
。这样,假设您的打包机制理解 Maven 作用域,Module B
将通过Module Base
使用compile
作用域,因此library 1
将被添加到最终包中,而Module A
会知道它已提供并且不应该在包中。