工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 2611|回复: 3

Maven2学习笔记(1)

[复制链接]
发表于 2007-3-9 23:38 | 显示全部楼层 |阅读模式
近几周在学习使用Maven,把一些心得记下,以备遗忘
一,Maven 让事情变得简单,Maven简介
省略
二,与Ant的比较
第一:每次和别人说maven的时候,很多会认为是全新的东西而不肯放弃ant。其实,ant脚本是可以直接运行在maven中的。

如果要说maven和ant有什么差别,我觉得最大的差别就是在于maven的编译以及所有的脚本都有一个基础,就是POM(project object model)。这个模型定义了项目的方方面面,然后各式各样的脚本在这个模型上工作,而ant完全是自己定义,显然maven更胜一筹。

第二:Maven对所依赖的包有明确的定义,如使用那个包,版本是多少,一目了然。而ant则通常是简单的inclde 所有的jar。导致的最终结果就是,你根本无法确定JBoss中的lib下的common-logging 是哪个版本的,唯一的方法就是打开 META-INF 目录下MANIFEST.MF。估计JBoss迟早会转向Maven的。

第三:Maven是基于中央仓库的编译,即把编译所需要的资源放在一个中央仓库里,如jar,tld,pom,等。当编译的时候,maven会自动在仓库中找到相应的包,如果本地仓库没有,则从设定好的远程仓库中下载到本地。这一切都是自动的,而ant需要自己定义了。这个好处导致的结果就是,用maven编译的项目在发布的时候只需要发布源码,小得很,而反之,ant的发布则要把所有的包一起发布,显然maven又胜了一筹。

第四:maven有大量的重用脚本可以利用,如生成网站,生成javadoc,sourcecode reference,等。而ant都需要自己去写。试试 maven site 的效果。

第五:maven目前不足的地方就是没有象ant那样成熟的GUI界面,不过mavengui正在努力中。目前使用maven最好的方法还是命令行,又快又方便。

三,一些学习心得
Maven2是类似Ant得java项目构建工具,能够帮助我们很好的构建项目。
  首先,下载maven2:http://maven.apache.org
  Maven2得使用:
  1.将下载的Maven2得包解压到任意目录.配置环境变量.MAVEN_HOME:你得解压缩目录 PATH :%MAVEN_HOME%/bin
   2.测试安装情况,在命令行输入: mvn -v 出现 Maven version: 2.0.4 表示安装成功
    3.修改配置文件:去maven目录下得conf找到Setting.xml,修改其中的
    <localRepository>D:\soft\LoaclRepository</localRepository>
    这个路径表示本地资源库的位置。
    4. 创建项目
    mvn archetype:create -DgroupId=org.zhyh -DartifactId=my-app
       项目创建前,会看到maven从网上下载多个项目用到的.jar文件, 项目创间完成后可以看到Maven2为我们创建的目录结构。
   5.常用命令
 mvn compile 编译
 mvn test 执行所有的test用例
 mvn test-compile 编译所有的test用例
 mvn package  编译后打包
 mvn install 将编译和打包好的文件发布到本地repository
 mvn idea:idea
  mvn eclipse:eclipse 创建项目文件,如果要创建eclipse项目文件。用mvn eclipse:eclipse
  6.设置项目的依赖项
  在以前的java项目中,管理java依赖是非常复杂和繁琐的,现在可以通过Maven2管理依赖。
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
   配置了这个依赖项,运行项目前Maven2会自动下载junit得.jar包存于本地文件库中。
   scope参数,配置运行时参数,表明scope的参数表明。
     --compile:默认值。表明是所有任务所需的资源
    --test:运行所有的测试用例时所需资源
    --runtime:表明是运行时所需资源
   --provided:JDK部分或应用服务器的classpath所需的资源
   7.将多个项目构建于项目之中
   如何在一个主目录构件多个项目呢。Maven也为我们提供了简单的办法。
   <project>
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.zhyh</groupId>
   <version>1.0-SNAPSHOT</version>
   <artifactId>my-app</artifactId>
   <packaging>pom</packaging>  
   <modules>
   <module>module</module>
   <module>dao</module>
   <module>service</module>
   <module>web</module>
   </modules>
   </project>
      这里声明了子项目。
      我们来生命子项目的依赖项,
      DAO:的依赖项
      <dependencies>  
      <dependency>
      <groupId>org.zhyh</groupId>
      <artifactId>module</artifactId>
      <version>1.0-SNAPSHOT</version>
      </dependency>
      </dependencies>
      service:的依赖项
   <dependencies>  
      <dependency>
      <groupId>org.zhyh</groupId>
      <artifactId>module</artifactId>
      <version>1.0-SNAPSHOT</version>
      </dependency>
      <dependency>
      <groupId>org.zhyh</groupId>
      <artifactId>dao</artifactId>
      <version>1.0-SNAPSHOT</version>
      </dependency>
      </dependencies>
      web的依赖项:
   <dependencies>  
      <dependency>
      <groupId>org.zhyh</groupId>
      <artifactId>module</artifactId>
      <version>1.0-SNAPSHOT</version>
      </dependency>
      <dependency>
      <groupId>org.zhyh</groupId>
      <artifactId>dao</artifactId>
      <version>1.0-SNAPSHOT</version>
      </dependency>
      <dependency>
      <groupId>org.zhyh</groupId>
      <artifactId>service</artifactId>
      <version>1.0-SNAPSHOT</version>
      </dependency>
      </dependencies>
   我们还需要在每个子模块中配置,以表明这个子模块隶属于哪个项目
   <parent>
   <groupId>org.zhyh</groupId>
   <artifactId>my-app</artifactId>
   <version>1.0-SNAPSHOT</version>
   </parent>
   
发表于 2007-3-9 23:44 | 显示全部楼层
听楼主说得这么好,真想下载来试试。
不过,ant用得还不熟,觉得便捷,功能也足够,就把Maven暂时放一边了。
回复

使用道具 举报

 楼主| 发表于 2007-3-10 00:03 | 显示全部楼层
Maven1同 Maven2有十分大的改变,基本上 从设计结构上都改了
回复

使用道具 举报

 楼主| 发表于 2007-3-10 00:04 | 显示全部楼层
eclipse+svn+jetty搭配....简直就是一个爽字
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-8-31 05:42

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表