用 maven 做项目管理在 Java世界中我们很多的开发人员选择用 Ant来构建项目,一个 build.xml能够完成编译、测试、打包、部署等很多任务,但我们也碰到了很多的问题,如 jar文件管理混乱,各个项目结构和 build.xml相差很大等等。而 Maven的出现,给项目提供了更多的支持。
1 简介 Maven 作为 Apache 的一个开源项目,旨在给项目管理提供更多的支持,主页地址为 http://maven.apache.org 。它最早的意图只是为了给 apache 组织的几个项目提供统一的开发、测试、打包和部署,能让开发者在多个项目中方便的切换。很多伟大的事业,出发点都很简单, ebay 就是很好的例证。而 maven 的成功又一次验证了这一点,越来越多的项目开始使用 maven 。
基本原理
Maven 的基本原理很简单,采用远程仓库和本地仓库以及一个类似 build.xml 的 pom.xml ,将 pom.xml 中定义的 jar 文件从远程仓库下载到本地仓库,各个应用使用同一个本地仓库的 jar ,同一个版本的 jar 只需下载一次,而且避免每个应用都去拷贝 jar 。如图 1 。同时它采用了现在流行的插件体系架构,只保留最小的核心,其余功能都通过插件的形式提供,所以 maven 下载很小( 1.1M ),在执行 maven 任务时,才会自动下载需要的插件。
这个基本原理与 Pear ――PHP扩展与应用库( the PHP Extension and Application Repository )的原理非常相似,都有一个官方的仓库,都是微内核,通过网络将需要的文件下载到本地,通过官方仓库将相应的类库进行统一管理。 Pear 已经成为 PHP 开发事实上的标准,而 Maven 在 Java 世界的地位也逐渐加强,成为标准指日可待。
另外由于插件的易开发性,现在有了非常多的可供选择的插件,如与 eclipse 结合的插件,与 test 相关的插件,后面我们结合 maven 在项目中的使用进行详细介绍。
2 项目管理 Maven 官方把 maven 定义为一个项目管理工具,我们不妨看看 maven 能给我们的项目提供哪些好的支持。
2.1 项目标准化 Maven 一个重要特性是定义了项目的标准模板,官方说法是最佳实践。可以通过命令: mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app 创建一个单一的 maven 项目。创建好的项目,具有了特定的项目结构。这个项目结构是参考业界的最佳实践而成,为后面使用统一的 maven 命令打下了基础,如测试 mvn test 、打包 mvn package 等,无需写一行脚本,就可以方便的实现众多功能。 Maven 还提供其它一些类型模板,可以通过添加 -DarchetypeArtifactId= { type }创建,如 -DarchetypeArtifactId=maven-archetype-site ,生成 site 类型的项目。
同时一些好的开源软件使用了 maven ,也能作为很好的项目模板,如 Equinox ( Appfuse 的简化版),它的 pom 定义了对 hiberante,spring… 的依赖,可以通过 ant new -Dapp.name=NAME 快速生成项目原型,然后对 pom 文件进行裁减,以符合自身项目的需要。
有了这个标准,项目间能方便的进行交流,你也很容易了解其它使用 maven 项目的结构。对于企业来说,引入 maven 就自然引入了规范,这可比费时费力的写文档,定规范有效的多了。
2.2 文档和报告 使用 mvn site 可以快速生成项目站点, apache 很多开源项目站点都采用 maven 生成,会出现 built by maven 字样的图标。
而 maven 提供的针对如 junit , checkstyle , pmd 等的插件,能够方便的进行测试和检查并能直接生成报告。使用都很简单,如 mvn surefire-report:report 就能自动进行 junit 测试,并生成 junit 报告, mvn pmd:pmd 生成 pmd 报告。具体使用可以在 http://maven.apache.org/plugins/index.html 找到。
2.3 类库管理 Maven 一个很重要的特色就是类库管理。通过在 pom.xml 中定义 jar 包版本和依赖,能够方便的管理 jar 文件。以下是一个简单的 jar 定义片断:
jar
groupId
org.hibernate
artifactId
hibernate
3.1
scope
runtime
M2_REPO
)/ org/hibernate / hibernate /3.1/ hibernate -3.1.jar
classpath
maven
pom.xml
jar
hibernate-3.1.jar
hibernate -3.1.pom
pom
jar
jar
pom
maven
jar
hibernate
jar
pom
jar
web
jar
WEB-INF/lib
cvs(svn)
maven
pom.xml
mvn eclipse:eclipse
maven
mvn package
mvn test
testcase
war
packaging
war
target
war
ant
maven
ant
mvn install
distributionManager
repository
mvn deploy
Maven
maven
maven
Maven
maven
SCM
CVS
SVN
pom.xml
repository
remote repository
repository
maven
Springside
http server
apache
maven
htdocs
ip
192.168.0.1
maven2
pom.xml
jar
mvn eclipse:eclipse
jar
repository
${user.home}/.m2/
windows xp
C:\Documents and Settings\
username%\.m2
username
${user.home}/.m2/
repository
jar
groupId/ artifactId/version
repository
apache
maven
jar
jar
jar
maven
pom.xml
repository
jar
repository
repository
Maven
1.
apache
maven
maven
maven
4.
mvn –version
5.
eclipse
mvn eclipse:eclipse
eclipse
M2_REPO
Classpath Variables
repository
C:/Documents and Settings/Owner/.m2/repository
pom.xml
cmd
maven
Maven
mvn eclipse:eclipse
jar
mvn eclipse:eclipse
jar
mvn test
mvn package
target
mail:pesome@gmail.com
Maven
maven
maven
pesome
JavaEE
spring
www.openfans.net
1. http://maven.apache.org
2.
Maven2
Posted by kevinwu on December 15, 2006 09:22 PM |
相关文档_
- 海报