maven入门实战

12年前
项目一大,管理起来就不太容易了。编译、测试、打包、发布,一个枯燥的周而复始的工
作让无数程序员崩溃了一次又一次。于是,ant出现了~构建工程师终于可以轻松一下了。
他们欢快得敲着xml式的命令:在xx位置创建一个xx文件夹,把xx文件夹下的源码进行编
译,编译完的class文件放在xx位置,在xx位置的已发布包备份一下,然后把新发布的包
放到xx位置……

但是项目不同,构建工程师不同,他们写的ant脚本就不同,构建方式就不同,一个新人
过来项目组,总是不可避免的要花一部分时间来熟悉新项目的构建方式,浪费了很多无谓
的时间,大家怨声载道……于是,maven出现了……

maven认为约定优于配置,它不是为你构建的不同任务编写脚本,它提倡一组标准,一个
一般的接口,一个生命周期,一个标准的仓库格式,一个标准的目录布局,等等

一个新人弄懂了一个maven项目的构建方式,也就弄懂了所有的maven项目的构建方式……
以后你拿到一个项目之后,你就会自然而然的知道用mvn install来构建它……
Maven 的核心财产是声明性构建,依赖管理,仓库管理,基于插件的高度的重用

举个简单的例子,ant啥事都是自己干,像是攒一台组装机,而maven则更像是一品牌机~

maven的目标:就是干掉构建工程师(嘎嘎,开个玩笑)

OK.Let's get started!

1、去maven.apache.org/download.html下载maven,解压缩
2、设置环境变量,M2_HOME=maven根目录;path=%M2_HOME%\bin(Windows方式),用
Linux的同学就按照Linux的方式设置一下就好~
3、打开命令行,运行:mvn -v,如果有版本输出,OK,说明你安装成功了
4、初始化maven:运行一下mvn help:system,初始化一下
5、开始一个小项目~
    1)mvn archetype:generate,简单解释一下这个命令,archetype是一个maven插件,
    maven的绝大部分功能都是靠插件来完成的,这个插件提供了一些项目的核心骨架,
    比如一个简单的项目是这样的目录结构:
    frame-simple   |-src     |-main       |-java    |-一些带有包结构的java文件       |-resources    |-一些配置文件,比如log4j.properties     |-test       |-java       |-resources   |-pom.xml


     但是对于一个web项目,目录结构就会稍有不同,maven要求把jsp文件放在src/main/webapp
     下,当然,WEB-INF目录也是放在这里

     不同的项目,目录结构是不同的,我们称为项目骨架类型不同,mvn archetype:generate
     这么命令就会有很多骨架类型让你选择,看到很多输出不要惊慌,选择默认的编号(这个
     编号就表示一个最简单的骨架类型),回车,接下来让你输入:
     groupId/artifactId/version/package

     先不要问为什么,groupId输入:com.baidu.testmvn;artifactId输入:testmvn-simple,version
     直接按照默认的来就行,直接回车,package输入:com.baidu.testmvn,然后一个新的项目就骨架就
     搭建起来了

     如果我现在要搭建一个web项目,可以直接这样输入一条命令来搞定:
     mvn archetype:generate -DgroupId=hx.frame -DartifactId=frame-web -DarchetypeArtifactId=maven-archetype-webapp

     groupId/artifactId/version这几个东东组成了maven中的坐标,这个解释起来挺麻烦,大伙可以google一下,
     maven利用坐标来唯一的定位一个jar包。全球有个maven中央库,那里维护了各种类型各种版本的jar包,
     他们需要一个唯一的标识来识别嘛是吧,所以坐标就应运而生了。

     项目的根下有个pom.xml不知道你注意到没有,这个文件在整个项目中灰常重要,它规定了当前项目
     依赖于哪些jar包,用了哪些maven插件,使用了什么样的编译参数等等。你打开自己的文件看一下就好了,
     我就不贴出来了~默认情况下,maven为你引入了一个junit,可惜版本太低,不过没有关系,直接改成
     4.8的版本就行,在这里稍微这么一改动,maven就知道你要用哪个版本了,这,就是声明式构建的体现哦

6、导入你喜欢的IDE,我习惯用idea,直接File->New Project,选择已经存在的maven项目,导入,O了
你可能习惯用eclipse,自己google一下怎么导入吧

在idea右侧有一个maven project的小窗口,里边有一些命令可以直接运行:
mvn clean  mvn validate  mvn compile  mvn test  mvn package  mvn install  mvn site  mvn depoly
其实这些命令就推动了maven项目的生命周期~google一下“maven 生命周期”
先清理一下,然后编译一下,测试一把,打个包,发布,是吧,正好也是你平时的做法,对吧,呵呵

maven对于项目的lib库的依赖管理很有一手,具体怎么管理的这里就不展开了,google一下“maven 依赖管理”
不过可以列几个命令share一下:
mvn dependency:list 查看当前项目的已解析依赖
mvn dependency:tree 查看当前项目的依赖树
mvn dependency:analyze 分析当前项目的依赖状况,可以找到一些warning:
a)使用了未声明的依赖
b)没有使用已声明的依赖(这些或许可以删掉,但是要仔细分析,像spring-core,spring-beans看起来是没有用到,
但是他们是spring运行必须的)

OK,最后隆重推出一个maven插件,jetty-maven-plugin
这个插件可以启动一个jetty web服务器,启动速度喜人,一旦启动,修改了jsp,页面上可以直接
反应出来,修改了servlet代码,运行一下mvn compile也可以立马反应出来,方便开发

在pom.xml中这样配置:
<build>  <finalName>frame-web</finalName>    <plugins>      <plugin>   <groupId>org.mortbay.jetty</groupId>   <artifactId>jetty-maven-plugin</artifactId>   <version>7.1.6.v20100715</version>     <configuration>       <scanIntervalSeconds>3</scanIntervalSeconds>       <webAppConfig>    <contextPath>/test</contextPath>       </webAppConfig>     </configuration>      </plugin>  </plugins>  </build>
然后命令行运行:mvn jetty:run
访问一下:localhost:8080/test/就可以看到你的index.jsp了