对于大型WEB项目或Java SE项目的开发一个很重要的部分就是代码的复用和维护管理。大多采用分模块开发,便于分工和后期的维护管理。本章介绍如何使用Maven+Eclipse来创建多模块工程,以及需要注意的事项。
本文使用Maven+Eclipse,请确认你电脑上Maven和Eclipse是否都配置OK。
本文以开发dubbo应用为例来讲解多模块项目开发。本例中主要涉及到三个module:
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.0modelVersion>
<groupId>com.ricky.dubbogroupId>
<artifactId>demoartifactId>
<version>0.0.1-SNAPSHOTversion>
<packaging>pompackaging>
....
<name>demoname>
<url>http://maven.apache.orgurl>
...
project>
如果项目编译出错,可以选中demo工程,单击 右键->Maven->Update Project。
1、在Eclipse中 New -> Maven Module;
2、在弹出的选项卡中输入Module Name,并选择Parent Project,此处选择demo即可,如下图所示:
3、选择Archetype
4、点击 Next
输入Package
5、点击Finish
6、修改pom.xml文件
由于我们在父项目中已经指定groupId和version了,所以在子项目中这两项就无须配置了,如下:
<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.0modelVersion>
<parent>
<groupId>com.ricky.dubbogroupId>
<artifactId>demoartifactId>
<version>0.0.1-SNAPSHOTversion>
parent>
<artifactId>dubbo-apiartifactId>
<name>dubbo-apiname>
<url>http://maven.apache.orgurl>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
properties>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<scope>testscope>
dependency>
dependencies>
project>
到此,dubbo-api 子项目已经创建完毕,照葫芦画瓢可以很轻松的创建dubbo-server、dubbo-client子项目。
通过此步骤创建子项目的同时,会修改父项目的pom.xml,增加一个module节点,如下:
<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.0modelVersion>
<groupId>com.ricky.dubbogroupId>
<artifactId>demoartifactId>
<version>0.0.1-SNAPSHOTversion>
<packaging>pompackaging>
<modules>
<module>dubbo-apimodule>
<module>dubbo-servermodule>
<module>dubbo-clientmodule>
modules>
...
project>
最终项目结构如下:
在子项目的pom.xml中有个parent节点,它会继承父项目的相关信息,父子项目中存在继承关系。
通常,子项目pom.xml文件中的groupId和version一般和父项目相同,那么可以把子项目的这两个参数删除,这样会自动继承父项目的取值。
同样,如果其他的一些属性,所有子项目都是一样的,那么可以上移到父项目中设置,子项目中无需重复设置。比如:
<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.0modelVersion>
<groupId>com.ricky.dubbogroupId>
<artifactId>demoartifactId>
<version>0.0.1-SNAPSHOTversion>
<packaging>pompackaging>
<modules>
<module>dubbo-apimodule>
<module>dubbo-servermodule>
<module>dubbo-clientmodule>
modules>
<name>demoname>
<url>http://maven.apache.orgurl>
<properties>
<dubbo.version>2.4.9dubbo.version>
<junit.version>4.12junit.version>
<java.version>1.8java.version>
<maven.compiler.version>3.1maven.compiler.version>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>dubboartifactId>
<version>${dubbo.version}version>
dependency>
<dependency>
<groupId>com.ricky.dubbogroupId>
<artifactId>dubbo-apiartifactId>
<version>0.0.1-SNAPSHOTversion>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>${junit.version}version>
<scope>testscope>
dependency>
dependencies>
dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<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配置如下:
<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.0modelVersion>
<parent>
<groupId>com.ricky.dubbogroupId>
<artifactId>demoartifactId>
<version>0.0.1-SNAPSHOTversion>
parent>
<artifactId>dubbo-serverartifactId>
<packaging>jarpackaging>
<name>dubbo-servername>
<url>http://maven.apache.orgurl>
<dependencies>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>dubboartifactId>
dependency>
<dependency>
<groupId>com.ricky.dubbogroupId>
<artifactId>dubbo-apiartifactId>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<scope>testscope>
dependency>
dependencies>
project>
到此,Maven多模块讲解告一段落了,如果你使用 IDEA的话,会发现IDEA构建多模块项目更加方便。