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

posted @ 2011-05-17 14:33  跳刀的兔子  阅读(1715)  评论(0编辑  收藏  举报