最近遇到了一个maven打包的问题,maven-child继承maven-parent,reference依赖maven-child,但是不需要maven-parent依赖的jar包。
<parent>
<artifactId>maven-parent</artifactId>
<groupId>com.xwiam</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>maven-child</artifactId>
<version>1.0-SNAPSHOT</version>
<groupId>com.xwiam</groupId>
<artifactId>reference</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.xwiam</groupId>
<artifactId>maven-child</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
虽然用通配符,exclusions排除掉了,但是打出来的jar包里面还是包含了maven-parent依赖的ar包,当时百思不得其解,google花了半天时间,了解了下maven的依赖机制和继承机制。maven的继承机制和java的继承机制类似,maven的依赖机制和java的组合机制类似,而exclusions只适用于依赖机制,暂时并不适用于继承机制(不排除后续的版本会支持)。因此解决办法是把继承改成依赖。
<groupId>com.xwiam</groupId>
<artifactId>maven-child</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.xwiam</groupId>
<artifactId>maven-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<type>pom</type>
<optional>true</optional>
</dependency>
</dependencies>
maven-child设置maven-parent为optional dependency,由于optional dependency不具有传递性,所以reference就不依赖maven-parent,也就排除了maven-parent依赖的jar包。
由于之前对maven的继承和依赖机制并没有深入了解,在这个问题上入了坑,特记录一下。