如何在应用中通过引入父POM依赖一次性引入多模块Maven库的子模块?
问题解答
不行,直接引入多模块库的父POM依赖没法一次性把两个子模块的jar都引入。因为父POM的packaging类型是pom,它的作用是统一子模块的配置、版本管理等,本身不会包含子模块的依赖逻辑,单独引父POM不会自动把module1和module2的jar拉进来。
不过有两种常用方法可以实现“一次性引入多个子模块依赖”的需求:
方法1:利用父POM的dependencyManagement统一版本
在多模块库的父POM中,通过dependencyManagement节点统一声明所有子模块的版本,这样在你的应用里引入子模块依赖时,就不用重复写版本号,虽然还是要分别写两个依赖,但版本管理更简洁。
父POM示例:
<project> <groupId>com.yourgroup</groupId> <artifactId>parent-pom</artifactId> <version>1.0.0</version> <packaging>pom</packaging> <modules> <module>module1</module> <module>module2</module> </modules> <dependencyManagement> <dependencies> <dependency> <groupId>com.yourgroup</groupId> <artifactId>module1</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>com.yourgroup</groupId> <artifactId>module2</artifactId> <version>${project.version}</version> </dependency> </dependencies> </dependencyManagement> </project>
你的应用POM中引入依赖:
<project> <!-- 先引入父POM,或者直接在dependencyManagement里继承版本 --> <parent> <groupId>com.yourgroup</groupId> <artifactId>parent-pom</artifactId> <version>1.0.0</version> </parent> <dependencies> <dependency> <groupId>com.yourgroup</groupId> <artifactId>module1</artifactId> </dependency> <dependency> <groupId>com.yourgroup</groupId> <artifactId>module2</artifactId> </dependency> </dependencies> </project>
方法2:创建聚合依赖模块
在多模块库中新增一个专门的聚合模块(比如叫module-all),这个模块的packaging也是pom,但它的dependencies节点里会包含module1和module2的依赖。这样你的应用只需要引入这个聚合模块,就能一次性拉取两个子模块的jar。
聚合模块module-all的POM示例:
<project> <parent> <groupId>com.yourgroup</groupId> <artifactId>parent-pom</artifactId> <version>1.0.0</version> </parent> <artifactId>module-all</artifactId> <packaging>pom</packaging> <dependencies> <dependency> <groupId>com.yourgroup</groupId> <artifactId>module1</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>com.yourgroup</groupId> <artifactId>module2</artifactId> <version>${project.version}</version> </dependency> </dependencies> </project>
别忘了在父POM的modules里加上这个新模块:
<modules> <module>module1</module> <module>module2</module> <module>module-all</module> </modules>
然后你的应用里只需要引入这一个依赖:
<dependency> <groupId>com.yourgroup</groupId> <artifactId>module-all</artifactId> <version>1.0.0</version> </dependency>
内容的提问来源于stack exchange,提问作者Kumar
相关产品推荐
相关产品推荐

