hexq 发表于 2007-3-9 23:38

Maven2学习笔记(1)

近几周在学习使用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>
   

powerwind 发表于 2007-3-9 23:44

听楼主说得这么好,真想下载来试试。
不过,ant用得还不熟,觉得便捷,功能也足够,就把Maven暂时放一边了。

hexq 发表于 2007-3-10 00:03

Maven1同 Maven2有十分大的改变,基本上 从设计结构上都改了

hexq 发表于 2007-3-10 00:04

eclipse+svn+jetty搭配....简直就是一个爽字
页: [1]
查看完整版本: Maven2学习笔记(1)