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