图3:项目的目录结构
图4:目录结构解释
可以看到依据原型生的项目包括pom和程序的源代码目录树结构以及测试源代码的目录树结构。这是标准的Maven项目的布局结构。
然后就可以在这些目录结构下写代码了。现在接着接好一些常用指令:
编译 mvn compile
执行该命令后会有如下输出
图5:执行编译时的输出
注意:在第一次编译的时候Maven会下载所有插件以及执行当前命令所需的依赖项。所以通常会持续一段时间。如图4中所示花费了将近4分钟。当时我在头次编译EIT的时候也花了很长时间。不过之后的话就会快很多了。
编译后的二进制class都会存放在根目录下的target/classes中。Maven相对比于Ant的一个优势就是在于你不需要指定源文件的位置以及编译后文件的保存位置。所有的都依照maven的约束来进行。
测试 mvn test
执行该命令后有如下输出:
图6:测试输出
如果只想编译测试代码则 输入 mvn test-compile
创建jar包 mvn package
回顾pom.xml可以看到其中packaging被设定为jar。所以执行上面的命令之后就可以在target目录中找到你需要的jar文件了。
安装 mvn install
执行了上面这个指令就可以将JAR文件安装到本地资料库中(默认是~/.m2/repository)。然后得到如下的输出
图7:安装输出
经过以上几个命令已经将一个典型的Maven项目进行了设置、构建、测试、打包和安装。这基本上是使用Maven构建项目的大部分。
其实上述指令对应了Maven的生命周期。
Maven的生命周期:
validate :验证工程是否正确,所有需要的资源是否可用。
compile:编译项目的源代码。
test-compile:编译项目测试代码。
test:使用已编译的测试代码,测试已编译的源代码。
package:已发布的格式,如jar,将已编译的源代码打包。
integration-test:在集成测试可以运行的环境中处理和发布包。
verify:运行任何检查,验证包是否有效且达到质量标准。
install:把包安装在本地的repository中,可以被其他工程作为依赖来使用。
deploy:在整合或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。
generate-sources:产生应用需要的任何额外的源代码,如xdoclet。