maven多继承和继承链

来源:互联网 发布:印象笔记怎么用 知乎 编辑:程序博客网 时间:2024/06/15 16:19

需求:

一个工程需要继承多个父工程。例如:开发springboot项目时需要继承spring-boot-starter-parent,但是又想继承自定义的父工程,怎么办呢?看下面两种解决方案

方案一、子工程继承两份父工程,一份自定义父工程pom,另一份父工程pom通过dependencyManagement的方式继承

自定义父工程

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>org.xxx</groupId>    <artifactId>xxx-parent</artifactId>    <version>1.0-SNAPSHOT</version>    <packaging>pom</packaging>    <properties>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        <java.version>1.8</java.version>        <jdk15on.version>1.56</jdk15on.version>        <jedis.version>2.9.0</jedis.version>    </properties>    <dependencyManagement>        <dependencies>            <dependency>                <groupId>org.bouncycastle</groupId>                <artifactId>bcpkix-jdk15on</artifactId>                <version>${jdk15on.version}</version>            </dependency>            <!-- Redis -->            <!--<dependency>                <groupId>redis.clients</groupId>                <artifactId>jedis</artifactId>                <version>${jedis.version}</version>            </dependency>-->        </dependencies>    </dependencyManagement></project>

子工程

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>org.xxx</groupId>    <artifactId>xxx-rest</artifactId>    <version>1.0-SNAPSHOT</version>    <packaging>jar</packaging>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>1.5.2.RELEASE</version>    </parent>    <dependencyManagement>        <dependencies>            <dependency>                <groupId>org.xxx</groupId>                <artifactId>xxx-parent</artifactId>                <version>1.0-SNAPSHOT</version>                <type>pom</type>                <scope>import</scope>            </dependency>        </dependencies>    </dependencyManagement>    <dependencies>        <!-- spring-boot工程的 -->        <dependency>                <groupId>redis.clients</groupId>                <artifactId>jedis</artifactId>        </dependency>        <!-- xxx-parent工程的 -->        <dependency>            <groupId>org.bouncycastle</groupId>            <artifactId>bcpkix-jdk15on</artifactId>        </dependency>    </dependencies></project>

刷新maven,可以看到两个父工程的依赖都可以继承。
上述自定义父工程中没有redis的依赖,如果其他子工程也需要redis,则也需要此时有两种方案:1. 只继承自定义父工程,父工程引入redis依赖,此时redis的版本就要和spring-boot-starter-parent中的redis版本一致,否则继承两个父工程的子工程的redis就会出现版本冲突;2. 同时继承spring-boot-starter-parent,这样每个子工程都需要同时继承两个父工程。

方案二、只继承自定义父工程,自定义父工程继承另一个父工程

自定义父工程

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>org.xxx</groupId>    <artifactId>xxx-parent</artifactId>    <version>1.0-SNAPSHOT</version>    <packaging>pom</packaging>    <properties>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        <java.version>1.8</java.version>        <jdk15on.version>1.56</jdk15on.version>    </properties>    <dependencyManagement>        <dependencies>            <dependency>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-dependencies</artifactId>                <version>1.5.2.RELEASE</version>                <type>pom</type>                <scope>import</scope>            </dependency>            <dependency>                <groupId>org.bouncycastle</groupId>                <artifactId>bcpkix-jdk15on</artifactId>                <version>${jdk15on.version}</version>            </dependency>        </dependencies>    </dependencyManagement></project>

子工程

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>org.xxx</groupId>    <artifactId>xxx-rest</artifactId>    <version>1.0-SNAPSHOT</version>    <packaging>jar</packaging>    <parent>        <groupId>org.xxx</groupId>        <artifactId>xxx-parent</artifactId>        <version>1.0-SNAPSHOT</version>    </parent>    <dependencies>        <!-- spring-boot工程的 -->        <dependency>                <groupId>redis.clients</groupId>                <artifactId>jedis</artifactId>        </dependency>        <!-- xxx-parent工程的 -->        <dependency>            <groupId>org.bouncycastle</groupId>            <artifactId>bcpkix-jdk15on</artifactId>        </dependency>    </dependencies></project>

ok,大功告成。。。

原创粉丝点击