简介
因为在工作中经常要使用到maven做工程开发。很多时候我们开发的项目不仅仅是一个单独的工程,出于更多的可重用和部署的目的,我们在大多数的情况下会使用多个工程进行开发。因此怎么使用maven来创建多工程的项目就有必要总结一下。在前面的一些文章里已经讨论过了maven相关的基础设置。
详细步骤
创建父工程
通常的情况下,我们是希望创建一个父工程,它将作为一个所有工程的公共目录。里面包含有整个大的项目的描述。
比如说,我们执行如下命令:
mvn archetype:generate -DgroupId=com.yunzero -DartifactId=cloud-parent -DinteractiveMode=false
系统会输出一大堆如下的内容:
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Maven Stub Project (No POM) 1 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] >>> maven-archetype-plugin:2.2:generate (default-cli) > generate-sources @ standalone-pom >>> [INFO] [INFO] <<< maven-archetype-plugin:2.2:generate (default-cli) < generate-sources @ standalone-pom <<< [INFO] [INFO] --- maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom --- [INFO] Generating project in Batch mode [INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0) [INFO] ---------------------------------------------------------------------------- [INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.0 [INFO] ---------------------------------------------------------------------------- [INFO] Parameter: basedir, Value: /home/frank/programcode/maven [INFO] Parameter: package, Value: com.yunzero [INFO] Parameter: groupId, Value: com.yunzero [INFO] Parameter: artifactId, Value: cloud-parent [INFO] Parameter: packageName, Value: com.yunzero [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] project created from Old (1.x) Archetype in dir: /home/frank/programcode/maven/cloud-parent [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 16.855 s [INFO] Finished at: 2015-05-04T21:12:33+08:00 [INFO] Final Memory: 15M/303M [INFO] ------------------------------------------------------------------------
这个时候,如果我们去看当前的目录,会生成一个名字为cloud-parent的目录。上述的命令就是生成一个名字为cloud-parent的工程,而且里面的工程默认包空间名为com.yunzero。这个生成的目录结构如下图:

除了生成的目录结构之外,我们再来看看生成的pom.xml文件的内容。
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yunzero</groupId>
<artifactId>cloud-parent</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>cloud-parent</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
这是一个典型的maven工程pom描述文件。而且它默认的打包方式是生成jar文件。在这里,因为我们需要将该工程作为项目的父目录,所以需要将<packaging>元素里面的jar改为pom。同时,该文件家生成的其他文件并不是必要的,我们可以将它们都删除。这样,我们就得到一个仅仅包含有pom.xml文件的目录。
生成子工程
假设我们还需要生成两个子工程,分别为cloud-common, cloud-service。我们可以在该工程目录中执行命令:
mvn archetype:generate -DgroupId=com.yunzero -DartifactId=cloud-common -DinteractiveMode=false
这个时候,我们会发现在当前的目录里多了一个cloud-common的目录。这样整体的项目结构如下图:

如果我们再去看当前目录下的pom.xml文件,会发现里面多了这么一个部分:
<modules>
<module>cloud-common</module>
</modules>
这部分就正好定义了父工程和所包含的子工程之间的关系。
按照同样的方法,我们再定义另外一个工程cloud-service。
mvn archetype:generate -DgroupId=com.yunzero -DartifactId=cloud-service -DinteractiveMode=false
这样,整个的工程就生成了。我们可以运行命令mvn clean install来编译和打包工程。
导入eclipse
执行命令:
mvn eclipse:eclipse
在结束后运行eclipse,选择导入工程:

然后选择我们刚才创建的工程所在目录:

选择确定之后我们将看到有如下的两个工程被选择上了:

这样,一个多工程的项目就被创建了。

本文详细介绍了如何使用Maven创建多工程的项目,包括创建父工程、生成子工程、导入Eclipse等关键步骤,以及如何通过命令行操作实现多工程项目的构建与管理。
245

被折叠的 条评论
为什么被折叠?



