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项目的不同存储机制,这些都是放在同一个目录里。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值