我有一个多模块库,比如:
pom.xml - module1 (results in jar1) - module2 (results in jar2)
我有另一个应用程序,我需要这两个jar作为依赖项。我可以添加两个依赖项,artifactId分别为module1和module2。有没有一种方法可以添加依赖到父pom,这样两个jar都可以添加。
r7knjye21#
不能直接向父POM添加依赖项以引入子模块作为依赖项。父POM通常用于管理子模块之间的共享配置,并且不包括或引用其子模块产生的构件。处理这种情况的常用方法是,正如您已经做过的那样,将每个模块作为单独的依赖项添加到应用程序POM中。但是,如果您试图简化依赖项管理,则有一些替代解决方案:
**创建uber或shaded JAR:**使用Maven的Shade Plugin或类似工具将两个模块合并到一个jar文件中。这个新的工件可以用作依赖项,从两个模块中引入所有类。但是,这可能会导致与其他依赖项的冲突,并且它是许多情况下的重量级解决方案。**创建BOM(物料清单):**BOM是一种特殊的POM,用于控制项目依赖项的版本,并提供一个定义和更新这些版本的中心位置。BOM表可以导入到其他项目中,以确保跨多个模块或项目的依赖项的一致版本。**聚合工件:**创建一个新模块,该模块依赖于所有其他模块,然后依赖于该新模块。只有当模块具有紧密耦合的关系时,这才真正有意义,否则,将不相关的工件分组不是一个很好的实践。
请记住,正确的解决方案取决于您的用例和项目的复杂性。您必须确保您选择的解决方案不会导致其他问题,例如版本冲突或不必要的大工件。#chatgpt
1条答案
按热度按时间r7knjye21#
不能直接向父POM添加依赖项以引入子模块作为依赖项。父POM通常用于管理子模块之间的共享配置,并且不包括或引用其子模块产生的构件。
处理这种情况的常用方法是,正如您已经做过的那样,将每个模块作为单独的依赖项添加到应用程序POM中。
但是,如果您试图简化依赖项管理,则有一些替代解决方案:
**创建uber或shaded JAR:**使用Maven的Shade Plugin或类似工具将两个模块合并到一个jar文件中。这个新的工件可以用作依赖项,从两个模块中引入所有类。但是,这可能会导致与其他依赖项的冲突,并且它是许多情况下的重量级解决方案。
**创建BOM(物料清单):**BOM是一种特殊的POM,用于控制项目依赖项的版本,并提供一个定义和更新这些版本的中心位置。BOM表可以导入到其他项目中,以确保跨多个模块或项目的依赖项的一致版本。
**聚合工件:**创建一个新模块,该模块依赖于所有其他模块,然后依赖于该新模块。只有当模块具有紧密耦合的关系时,这才真正有意义,否则,将不相关的工件分组不是一个很好的实践。
请记住,正确的解决方案取决于您的用例和项目的复杂性。您必须确保您选择的解决方案不会导致其他问题,例如版本冲突或不必要的大工件。#chatgpt