首页 » Java程序员修炼之道 » Java程序员修炼之道全文在线阅读

《Java程序员修炼之道》12.2 Maven 3入门项目

关灯直达底部

Maven遵循惯例优先的原则,你只要创建一个快速启动项目,马上就能看到它惯用的项目结构。它喜欢的典型项目结构看起来和下面的布局类似。

依照惯例,Maven把代码分成了main和test两部分。它还创建了一个特别的resources目录,构建工作所需的其他任何文件(比如用于日志的log4.xml文件、Hibernate配置文件以及其他类似资源文件)都放在这个目录下。pom.xml是Maven的构建脚本,关于这个文件的详情,请参见附录E。

如果你是多语言程序员,Scala和Groovy源码跟Java源码的结构一样,只是Java源码放在java目录下,而它们的根目录分别是scala和groovy。Java、Scala和Groovy代码可以高高兴兴地手拉手出现在同一个Maven项目中。

target目录是构建运行后才会创建的。所有的类、工件、报告和构建产生的其他文件都会出现在这个目录下。对于Maven项目结构的完整列表,请参见Maven网站上的Introduction to theStandard Directory Layout(标准目录布局介绍)页面(http://t.cn/aKJYxo)。

要为新项目创建这个结构,请执行下面的目标(注意其中的参数):

mvn archetype:generate    -DgroupId=com.mycompany.app    -DartifactId=my-app    -DarchetypeArtifactId=maven-archetype-quickstart    -DinteractiveMode=false  

然后你会看到Maven开始刷屏,它在疯狂下载插件和第三方类库。Maven需要它们来运行这个目标,它的默认下载地址是Maven Central(工件的在线资源库)。

为什么Maven看起来像要把整个互联网都下载下来?

“哦,又来了,Maven又开始下载了。”这是构建Java项目的兄弟之间常说的模因1 。但这真是Maven的错吗?我们认为它这样做有两个根本原因。一是第三方类库开发人员对包和依赖的管理很烂(比如在他们的pom.xml文件里指定一个实际上并不需要的依赖项)。另一个是继承自JAR为主的包系统自身的缺陷,没办法做更细化的依赖项控制。

1 模因(Meme)也称为米姆、弥、弥因、弥母、迷因以及谜米等,是文化资讯传承单位。这个词是1976年理查德•道金斯在《自私的基因》一书中创造的,以生物学中的演化规则类比文化传承的过程。模因包含甚广,包括宗教、谣言、新闻、知识、观念、习惯、习俗,甚至口号、谚语、用语、用字、笑话。——译者注

除了“正在下载......”,控制台应该还会有下面这种声明:

[INFO] ----------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ----------------------------------------------------------------[INFO] Total time: 1.703s[INFO] Finished at: Fri Jun 24 13:51:58 BST 2011[INFO] Final Memory: 6M/16M[INFO] ----------------------------------------------------------------  

如果这一步失败了,很可能是你的代理服务器不允许访问Maven Central,插件和第三方类库都放在那上面。要解决这个问题,只要编辑settings.xml文件(见附录A的A.2节),把下面这部分内容加上去,请根据你的实际情况为各元素填上恰当的值:

<proxies>   <proxy>      <active>true</active>      <protocol></protocol>      <username></username>      <password></password>      <host></host>      <port></port>   </proxy></proxies>  

重新运行上面的目标,这次应该能看到my-app项目出现在了目录中。

提示 如果团队中的所有人都遇到了这个问题,请在$M2_HOME/conf/settings.xml中加上代理配置。

Maven支持的原型(项目布局)几乎是无限的。如果要生成某个特定类型的项目(比如JEE6的项目),可以执行mvn archetype:generate目标,然后只要遵照它给你的提示就行了。

为了探索Maven的更多细节,我们来看一个源码和测试代码都已经准备好的项目,用它把整个构建周期走一遍。