此时02_child需要log4j这个依赖:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 "> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.example</groupId> <artifactId>01_parent</artifactId> <version>1.0-SNAPSHOT</version> </parent> <!-- <groupId>org.example</groupId> 如果子项目和父项目在同一级目录,使用parent标签表明了父项目坐标后,子项目的groupId可以省去 --> <artifactId>02_child</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </dependency> </dependencies> </project>03_child需要commons-logging这个依赖:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 "> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.example</groupId> <artifactId>01_parent</artifactId> <version>1.0-SNAPSHOT</version> </parent> <artifactId>03_child</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </dependency> </dependencies> </project>看maven项目之间的依赖:
此时02_child没有了commons-logging,03_child没有了log4j,我们已经解决了这个问题。
如果子项目使用的依赖不是父项目的版本,需要在子项目的pom中标明依赖的版本,否则默认使用的是父项目管理的版本。
其实我们这个问题主要是学习<dependencyManagement>这一标签在父项目中的作用
打包此时我们对02_child进行打包会报错,具体原因是:
Non-resolvable parent POM for org.example:02_child:1.0-SNAPSHOT: Could not find artifact org.example:01_parent:pom:1.0-SNAPSHOT and 'parent.relativePath' points at wrong local POM @ line 7, column 13@
说子项目解析不了父项目的POM文件,parent.relativePath错误。其实,我们在子类的parent标签中还要加一个<relativePath>标签,来指明父项目中POM的相对物理路径,这样子项目打包的时候,maven才能工具标签找到父项目的POM地址,不然也不知道子项目的引用从哪来。
项目报错:
子项目打包出错:Invalid packaging for parent POM com.cloud:DemoName:1.0-SNAPSHOT, must be “pom“ but is “jar“。
我们必须在父项目中pom指定打包格式为POM:<packaging>pom</packaging>
Could not find artifact com.cloud:DemoName:pom:1.0-SNAPSHOT
子项目打包前必须先打包父项目
聚合关系