Maven2学习笔记(6.Maven下设置应用程序的目录结构)
1、介绍
在第二章你建立了一个很基础项目,现在我们将更深入一点,使用一个现实世界中的项目。在本章中,你将要学习一些Maven的最佳实践和高级用法,通过一个小型的应用来掌握一些常见问题(FAQ)。这样做,你将通过指导建立特定的设置以及管理其结构。
你将要建立的应用程序名叫Proficio,是拉丁文“帮助”的意思。那么,让我们通过讨论其理想的目录结构开始吧。
2、建立应用程序的目录结构
在为Proficio建立目录结构过程中,牢记Maven强调分离、连贯性和模块化构建的实践很重要。该实践的很自然的结果分离和使组件连贯一致,以让代码可以被复用,这是任何软件项目的一个必要目标。如何最好的去分解你的应用的指导原则叫做关注分离(Separation of Concerns,SoC)。
SoC是指能够识别、封装、操作软件的一部分,有关某一特定的概念、目标、任务或目的。关注是组织和分解软件为更小、更易于管理和理解的部分的首要动力,其中每一项涉及一个或多个关注。
这样的话,你会看到,Proficio示例应用程序是由若干模块组成的:
•Proficio Model:Proficio应用程序的数据模型,其中包括所有的类,作为整体被Proficio使用。
•Proficio API:Proficio的应用编程接口,包括一些接口。主要组件的API接口,例如存储,都在这里。
•Proficio Core:API的实现。
•Proficio Stores:该模块本身包含全部的存储模块。Proficio有一个非常简单的基于内存的存储以及一个简单的基于XStream的存储。
•Proficio CLI:为Proficio提供命令行界面的代码。
这些都是Mave使用的默认命名规则,不过你可以使用项目组制定的任何命名规则来命名这些模块。唯一要坚持的标准是你的团队只有一个单一的规约,并且项目组成员都清楚的理解该规约,并且可以根据模块名就能容易的辨识出某模块的作用。
在检查Proficio的顶级POM过程中,你可以看到modules元素中组成Proficio的全部模块。一个模块是对另外一个Maven项目的引用,这也意味着对另一个POM的引用。该配置通常被称作多模块构建,下面是它的内容:
1.<project>
2.<modelVersion>4.0.0</modelVersion>
3.<groupId>org.apache.maven.proficio</groupId>
4.<artifactId>proficio</artifactId>
5.<packaging>pom</packaging>
6.<version>1.0-SNAPSHOT</version>
7.<name>Maven Proficio</name>
8.<url>http://maven.apache.org</url>
9....
10.<modules>
11.<module>proficio-model</module>
12.<module>proficio-api</module>
13.<module>proficio-core</module>
14.<module>proficio-stores</module>
15.<module>proficio-cli</module>
16.</modules>
17....
18.</project>
对于上述的POM,一个需要注意的重要特性是version元素的值,正如你看到的是1.0-SNAPSHOT。对于一个拥有多个模块的应用而言,全部模块一起发布是很常见的,因此所有模块都有一个共同的版本就很容易理解了。
当前,有多个Maven项目的目录结构在Maven Web网站还有一些差异。在Maven 1.x中,这些通常被称作多项目构建以及一些这方面的遗留术语被沿用到了Maven 2.x的文档中。但Maven团队正努力统一这些设置到多模块构建上来。
你应该注意到了packaging元素,它的值为pom。对于包含模块的POM来说,packaging的值必须为pom:这告诉Maven你正打算使用一系列模块,这些模块和在这里介绍的例子很类似。如果你看了Proficio的目录结果,你就会看到如下这样:
Proficio目录结构
你可能已经注意到了POM中的module元素和Proficio目录结构的名称相对应。这些名称就是Maven如何进入正确的目录来处理那里的POM文件的方法,让我们快速的看下这些模块并检查下它们各自的包:
大多数情况下包的类型都是默认为Jar,但有趣的是我们这里有一个项目的包类型是pom,它是proficio-stores模块。如果你看一下proficio-stores的pom文件,你会发现那里包括一系列module:
1.<project>
2.<parent>
3.<groupId>org.apache.maven.proficio</groupId>
4.<artifactId>proficio</artifactId>
5.<version>1.0-SNAPSHOT</version>
6.</parent>
7.<modelVersion>4.0.0</modelVersion>
8.<artifactId>proficio-stores</artifactId>
9.<name>Maven Proficio Stores</name>
10.<packaging>pom</packaging>
11.<modules>
12.<module>proficio-store-memory</module>
13.<module>proficio-store-xstream</module>
14.</modules>
15.</project>
检查proficio-stores中的目录结构,你会看到如下的:
Proficio-stores目录
当Maven发现POM的包类型的时候,它就会寻找一组modules,并处理每个module。你可以在任何层次上嵌套这些项目,根据关注点将这些项目分组,正如这里Proficio项目的不同存储机制,这些都是放在同一个目录里。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/abigfrog/archive/2008/10/24/3135694.aspx