简介
因为在工作中经常要使用到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,选择导入工程:
然后选择我们刚才创建的工程所在目录:
选择确定之后我们将看到有如下的两个工程被选择上了:
这样,一个多工程的项目就被创建了。