Maven多模块项目实战

前言

对于大型WEB项目或Java SE项目的开发一个很重要的部分就是代码的复用和维护管理。大多采用分模块开发,便于分工和后期的维护管理。本章介绍如何使用Maven+Eclipse来创建多模块工程,以及需要注意的事项。

一、准备工作

本文使用Maven+Eclipse,请确认你电脑上Maven和Eclipse是否都配置OK。

  • Maven 3.3
  • Eclipse-jee-mars-2-win32-x86_64

二、创建工程

本文以开发dubbo应用为例来讲解多模块项目开发。本例中主要涉及到三个module:

  • dubbo-api:待暴露的dubbo服务接口以及公共模块,dubbo-server、dubbo-client需要依赖此module
  • dubbo-server:dubbo服务端程序
  • dubbo-client:dubbo客户端程序

1、创建父项目

1、在Eclipse里面New -> Maven Project;

这里写图片描述

2、依次输入Group Id、Artifact Id、Version,如下:
Group Id: com.example
Artifact Id: multi-modules-demo
Version:0.0.1-SNAPSHOT

3、选择Archetype
使用默认的Archetype

这里写图片描述

(默认:GroupId:org.apache.maven.archetypes,Artifact Id:maven-archetype-quickstart)

4、点击 Finish
到此,就创建了一个普通的Maven工程。我们还需要对这个Maven工程进行修改。
另外,这是一个父项目,它不需要有什么源码,所以,我们将这个Maven工程下的其他目录都删除,仅保留pom.xml文件就行了,并修改pom.xml文件的packaging属性为pom,如下:

<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>com.ricky.dubbo</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    ....

    <name>demo</name>
    <url>http://maven.apache.org</url>
    ...
</project>


如果项目编译出错,可以选中demo工程,单击 右键->Maven->Update Project。

2、创建子项目

1、在Eclipse中 New -> Maven Module;

这里写图片描述


2、在弹出的选项卡中输入Module Name,并选择Parent Project,此处选择demo即可,如下图所示:

这里写图片描述


3、选择Archetype
这里写图片描述

4、点击 Next

这里写图片描述


输入Package

5、点击Finish

这里写图片描述

6、修改pom.xml文件
由于我们在父项目中已经指定groupId和version了,所以在子项目中这两项就无须配置了,如下:

<?xml version="1.0"?>
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.ricky.dubbo</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <artifactId>dubbo-api</artifactId>
    <name>dubbo-api</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

到此,dubbo-api 子项目已经创建完毕,照葫芦画瓢可以很轻松的创建dubbo-server、dubbo-client子项目。

通过此步骤创建子项目的同时,会修改父项目的pom.xml,增加一个module节点,如下:

<?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>com.ricky.dubbo</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>dubbo-api</module>
        <module>dubbo-server</module>
        <module>dubbo-client</module>
    </modules>

    ...
</project>

最终项目结构如下:

这里写图片描述

三、统一配置

在子项目的pom.xml中有个parent节点,它会继承父项目的相关信息,父子项目中存在继承关系。

通常,子项目pom.xml文件中的groupId和version一般和父项目相同,那么可以把子项目的这两个参数删除,这样会自动继承父项目的取值。

同样,如果其他的一些属性,所有子项目都是一样的,那么可以上移到父项目中设置,子项目中无需重复设置。比如:

<?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>com.ricky.dubbo</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>dubbo-api</module>
        <module>dubbo-server</module>
        <module>dubbo-client</module>
    </modules>

    <name>demo</name>
    <url>http://maven.apache.org</url>

    <properties>
        <!-- 在阿里巴巴内部广泛使用的GA版本为:2.4.9,强烈推荐此版本 -->
        <dubbo.version>2.4.9</dubbo.version>
        <junit.version>4.12</junit.version>
        <java.version>1.8</java.version>
        <maven.compiler.version>3.1</maven.compiler.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>${dubbo.version}</version>
            </dependency>

            <dependency>
                <groupId>com.ricky.dubbo</groupId>
                <artifactId>dubbo-api</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>

            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.compiler.version}</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <testSource>${java.version}</testSource>
                    <testTarget>${java.version}</testTarget>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

dubbo-server子项目的pom.xml配置如下:

<?xml version="1.0"?>
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.ricky.dubbo</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <artifactId>dubbo-server</artifactId>
    <packaging>jar</packaging>

    <name>dubbo-server</name>
    <url>http://maven.apache.org</url>

    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
        </dependency>

        <dependency>
            <groupId>com.ricky.dubbo</groupId>
            <artifactId>dubbo-api</artifactId>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

到此,Maven多模块讲解告一段落了,如果你使用 IDEA的话,会发现IDEA构建多模块项目更加方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值