[Maven]maven的简单介绍

十 9th, 2011

在很久很久以前,我们都知道ant可以很好的用于管理java项目,它以命令式脚本的形式提供,我们只需要配置好路径,写好任务的命令脚本,这样就能完成一个项目的编译打包等工作。

但是, 随着项目的变大,维护的成本相应也就加大了,这个时候我们采用的措施就是将常用的操作利用beanshell来写成plugin,并且增加中心repository来控制,也就是我们的antx 1.0。

当然Antx 1.0也不是万能的,beanshell – plugin的学习成本很高,不太好掌握.于是我们就利用maven 1.0的jelly来控制ant api,简化了创建plugin的过程, 也就是现在的antx 2.0。

接着, maven 2.0出现了,解决了1.0存在的问题,并很好的帮助我们管理项目.到目前为止, 阿里巴巴一直都在尝试,maven 2.0 + antx 2.0 是我们现在比较好的选择.

新特性

那么,我们为什么会推荐maven 2.0,它到底带来了那些特性啊? 下面的几个点是最吸引我们,也是相对于1.0来说,最突出的几个特性:

  1. 更快、更简单 : 运行速度与Ant相比也毫不逊色
  2. 更少的配置文件 : 一般只要使用pom.xml即可
  3. plugin语言变更 : 2.0 开始使用java
  4. 预定义的模板目录 :提供了缺省的标准目录模板
  5. 生命周期的引入 :   主要的生命周期阶段:
  6. 新增dependcy scope :
  7. 传递依赖,简化依赖管理: pom可以被继承

其中,第5,6点尤其重要,后面会详细介绍一下这连个特性:

生命周期的引入

在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。

新增dependcy scope

目前<scope>可以使用5个值:

  • compile,缺省值,适用于所有阶段,会随着项目一起发布。
  • provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
  • runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
  • test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
  • system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。

更多详细的介绍请参考IBM 的文档库:http://www.ibm.com/developerworks/cn/opensource/os-maven2/index.html

maven2安装

1、首先去官方网站下载之:http://maven.apache.org/download.html

2、设置环境变量:Maven2下载完后,我将其解压到我的计算机的d:\maven2下,然后设置其环境变量。

我的电脑—-属性—-高级—-环境变量,点击“系统变量”下的新建,输入:变量名 MAVEN_HOME; 变量值d:\Maven2,在系统变量列表中找到系统变量path,打开之,在变量值中追加”;%MAVEN_HOME%\bin”,至此环境变量设置完毕。

检查一下是否已经完成安装,打开dos窗口,输入mvn –v,如果出现以下信息则表示maven2已经安装成功:

Maven Version 2.2.1

用maven2创建第一个java工程

1、选择一个根目录,假设工作目录是D:\workspace
2、打开dos窗口采用cd命令进入D:\workspace目录下
3、输入下列指令

D:\workspace> mvn archetype:create -DgroupId=com.efn -DartifactId=test_demo

如果是生成一个web工程则用如下命令

mvn archetype:create -DgroupId=com.demo -DartifactId=web-app -DarchetypeArtifactId=maven-archetype-webapp

该指令会帮助你将所需要的目录结构搭建好,这也是上面提到的优点4,提供预定义的模板目录.

生成eclipse工程文件

一般Java开发人员采用的开发工具是eclipse,所以需要用maven的eclipse参数生成eclipse工程文件。输入如下

1、 采用dos的cd命令进入study目录
2、 输入指令:mvn eclipse:eclipse 如下所示:

D:\eclipse\workspace\study>mvn eclipse:eclipse

指令执行完毕后,发现多了两个文件:.classpath和.project

下载maven的eclipse插件

  1. 打开eclipse
  2. 打开菜单 help -Install New Software
  3. 点击按钮“Add”
  4. 在Name中输入:Maven2,在URL中输入http://m2eclipse.sonatype.org/sites/m2e/ Ok,然后下一步到底,你所需要做的就是等待安装完成。

导入工程

刚才已经生成了eclipse的工程文件,现在导入之。菜单File-import ,按“下一步”,选择工程文件导入完毕后,工程管理透视图就会出现test_demo节点了,在工程节点上,按鼠标右键,打开弹出菜单,选择maven2菜单项,弹出子菜单->Enable,点击之打开,在Group Id中输入:test_demo。或者, 直接现在导入Maven工程,操作也是非常的简单.

有关pom.xml的作用和各节点的作用可以到maven的官方网站查阅http://maven.apache.org/. 目前为止,所有的准备工作都已经就绪,现在我们就以一个main函数访问数据库为例介绍在实际开发中的使用。

搭建jar包

每一个java工程都不免使用第三方的jar包,Maven的好处就是可以统一管理这些架包,并使多个java工程共享这些架包。我们所需要做的就是按规则编辑pom.xml文件。Maven已经非常智能,使用maven的eclipse插件的向导,只要输入参数就可以将配置文件生成出来。我们的例子是用jdbc方式访问oracle的数据库。所以需要jdbc和oracle的jar包的支持。下面我们就来搭建这两个架包到test_demo工程里来。

有两种方式可以采用:

1. 自动向导

    第一种是采用向导方式并让向导直接去maven的服务器上下载你需要的架包,这种方式存在一定的风险,一来可能maven的服务器上并没有你需要的东东,二来每次智能的maven总是去寻找那并不存在的东东。抛出一大堆红字提示不说,达不到预期目标才是让人郁闷。以junit为例(这个东东倒是没有问题,呵呵)当工程的maven被Enable后,弹出菜单的maven2子菜,选择子菜单的“Add Dependency”菜单项,在Query中输入“junit”,向导会自动列出相关列表供选择。选择你最需要的架包,按“OK” 按钮。

如果你的本地仓库已经存在该jar包,则向导只在pom.xml加入依赖项信息,如果本地仓库没有,向导则会去maven的服务器下载jar包.

注意: 如果出现错误提示jar包无法下载,同时你手头也有jar包的话可以采用maven的指令进行本地化安装。见如下指令:

mvn install:install-file -DgroupId=javax.transaction -DartifactId=jta -Dversion=1.0.1B -Dpackaging=jar -Dfile=C:/jta.jar

2.  手工配置

手工配置前还是先介绍一下相关背景知识。首先了解一下jar仓库的概念,maven采用集中化的方式管理架包,凡用maven构建的java工程都可以重用统一管理下的架包,所以必须有一个统一存放jar文件的地方,这就是jar仓库,不论是开发还是部署都会建立一个本地仓库。这个仓库的位置默认是 c:\user\yuxiong.wangyx\.m2\repository(C盘为我的操作系统所在盘符,你只需换成你系统盘符)下,你可以修改配置文件改变默认的输出位置。该配置文件在maven目录下的conf子目录下。文件名叫settings.xml。现在我们分析一下配置文件pom.xml的结构,以junit为例,格式如下:

<dependencies>
     <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
     </dependency>
</dependencies>

再来看看本地仓库目录结构:

Repository

|– junit

|—– junit

|——– 3.8.1

|————- junit-3.8.1.jar

现在大家应该明白了吧,多余的话不说啦。照葫芦画瓢就是。不过注意先建目录后写配置文件,否则一旦保存,智能的插件就马上开始下载了……

保存后,会发现工程管理透视图发生了一点变化,依此方法再加上jdbc的jar包,现在可以开始写程序了,建一个类并添加main函数,编写程序如下:

java 代码

public static void main( String[] args )   {
….此处省略

}

编译程序

采用maven构建系统,则编译过程就独立了出来。这时你再用eclipse自带的编译工具就不起作用了。所以要想编译、调试、运行还要做一些工作。以前是在dos命令行方式下进行编译,现在的插件很好用,在eclipse配置一下就可以编译了。很方便。现在就不一一介绍了。下面命令行下常用的命令:

  • 创建Maven项目:mvn archetype:create
  • 编译源代码:mvn compile
  • 编译测试代码:mvn test-compile
  • 运行测试:mvn test
  • 产生site:mvn site
  • 打包:mvn package
  • 在本地Repository中安装jar:mvn install
  • 清除产生的项目:mvn clean

对于maven的学习,基本上告一段落,利用上面的知识点,可以应付日常的工作需要。当然,如果需要更近一步,大家可以尝试自己写一些plugin,以完善比较特殊的需求。 目前maven 3.0 也推出来了,下一阶段,可以先了解一下3.0相对2.0新增的特性。

(全文完)





除非注明,本站文章均为原创。本文基于 BY-NC-SA 协议进行授权,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名 metaboy(包含链接).

本文链接地址: http://blog.wangyuxiong.com/archives/51315

订阅本站:http://www.wangyuxiong.com/feed

分类: 工作笔记 工具推荐         标签:
目前还没有任何评论.

无觅相关文章插件,快速提升流量