Maven在eclipse中的实用
?????? Maven2 的新特性可以大大地缩短了开发管理中的工作量,使得开发人员将精力集中在实际的业务问题上。
?????? Maven 无疑是相当成功的,这一点从越来越多的开源项目开始使用 Maven 就可以看出。Maven?取得成功的原因很简单:在简化构建脚本的同时,功能并没有缩水,反而有所增强;提供汇集项目信息的工具,并以相当友好的方式呈现;丰富的插件简化了工作。如此有力的工具出现,自然是争相使用。
1. 更少的配置文件
??????????? Maven1 和 Maven2 主要配置文件的对比:
????????????? Maven1:project.xml、maven.xml、project.properties和build.properties。
????????????? Maven2:pom.xml和settings.xml。
??????????? POM是Maven的核心对象模型,在Maven2中POM已由project.xml转移到pom.xml中使用,一般只需要pom.xml就行了。
2. 提供预定义的目录模板
???????好的目录结构可以使开发人员更容易理解项目,为以后的维护工作也打下良好的基础。Maven2根据业界公认的最佳目录结构,为开发者提供了缺省的标准目录模板。Maven2的标准目录结构如下:????????????
??????????? 使用目录模板,可以使pom.xml更简洁。因为Maven2已经根据缺省目录,预定义了相关的动作,而无需人工的干预。以resources目录为例:
????????????? src/main/resources,负责管理项目主体的资源。在使用Maven2执行compile之后,这个目录中的所有文件及子目录,会复制到target/classes目录中,为以后的打包提供了方便。
????????????? src/test/resources,负责管理项目测试的资源。在使用Maven2执行test-compile之后,这个目录中的所有文件及子目录,会复制到target/test-classes目录中,为后续的测试做好了准备。
在src和 test都使用resources,方便构建和测试,这种方式本就已是前人的经验。通过使用Maven2,使这个经验在开发团队中得到普及。
3. 生命周期的引入
??????????? 在Maven2中有了明确的生命周期概念,而且都提供与之对应的命令,使得项目构建更加清晰明了。主要的生命周期阶段:
????????????? validate,验证工程是否正确,所有需要的资源是否可用。
????????????? compile,编译项目的源代码。
????????????? test-compile,编译项目测试代码。
????????????? test,使用已编译的测试代码,测试已编译的源代码。
????????????? package,已发布的格式,如jar,将已编译的源代码打包。
????????????? integration-test,在集成测试可以运行的环境中处理和发布包。
????????????? verify,运行任何检查,验证包是否有效且达到质量标准。
????????????? install,把包安装在本地的repository中,可以被其他工程作为依赖来使用
????????????? deploy,在整合或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。
????????????? generate-sources,产生应用需要的任何额外的源代码,如xdoclet。
??????????? 如果要执行项目编译,那么直接输入:mvn?compile即可,对于其他的阶段可以类推。阶段之间是存在依赖关系(dependency)的,如test依赖test-compile。在执行mvn test时,会先运行mvn test-compile,然后才是mvn test。
4. 新增Dependency Scope
??????????? 在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署。目前<scope>可以使用5个值:
????????????? compile,缺省值,适用于所有阶段,会随着项目一起发布。
????????????? provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
????????????? runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
????????????? test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
????????????? system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
??????????? <scope>的使用举例:
mvn war:exploded
?
5、Maven的主要生命周期:
validate: 验证项目是否正确以及相关信息是否可用
compile: 编译
test: 通过junit进行单元测试
package: 根据事先指定的格式(比如jar),进行打包
integration-test: 部署到运行环境中,准备进行集成测试
verify: 对包进行有效性性和质量检查
install: 安装到本地代码库
deploy: 在集成或发布环境,将包发布到远程代码库
?
??????? 创建Maven项目:mvn archetype:create
????????????? 编译源代码:mvn compile
????????????? 编译测试代码:mvn test-compile
????????????? 运行测试:mvn test
????????????? 产生site:mvn site
????????????? 打包:mvn package
????????????? 在本地Repository中安装jar:mvn install
????????????? 清除产生的项目:mvn clean
?
?