maven使用记录

很多人说maven学习曲线非常陡,确实如此,但对于初学者来说,没必要一下子跨越那条鸿沟,简单的让项目run起来,是最正确的学习思路!还有就是平时多用,带着问题去学习也是快捷之道。

安装maven,线上有很多教程,暂且跳过。
罗列下我工作中常用的maven命令:
    1. maven clean install
    2. maven eclipse:eclipse
    3. maven jetty:run
    4. maven dependency:tree > ***.txt
其实这些简单的命令已经基本够用,关键还是要知道maven能解决问题的范畴。遇到问题,再搜索下相关资料即可!

在工作中一般都是在已有的工程中进行开发,大多数情况是理解现有工程的结构目录、添加功能模块等。这样,对于maven理解的重心应该是pom.xml。

pom.xml是maven的核心,maven可以说是半智能的将我们需要依赖的二方库依赖(或间接依赖)进来。为什么有间接依赖,其实对于使用过maven的人来说,很好理解。pom.xml主要用来控制我们需要依赖进来的包问题(不会自动解决冲突)。以前对于手工时代的我们,若需要使用外部提供的jar包时,我们会去相应的网站下载相应的jar,然后手动导入eclipse工程的lib目录,通过这种手动的方式,不仅效率低下,而且还得了解jar包之间的依赖关系:你想使用一个jar,可能需要将该jar依赖的乱七八糟的jar一一找出来,才能实现使项目运行起来。说到这,也许你就理解,maven的pom其实就是为我们做了这件事!

比如说我们现在想在我们工程中使用spring,那你就可以通过如下网址找到spring的pom文件:http://mvnrepository.com/,这个就是maven的仓库(google可以搜索到),基本可以满足我们使用开源软件的需求,若你使用你们自己公司内部的jar,那在这里是搜不到的,得从你们公司内部仓库中搜索。就拿spring来说, 我们可以搜索到如下的dependency:
<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-core</artifactId>
 <version>3.2.5.RELEASE</version>
</dependency>
将该内容填入你建立的工程的pom文件件的dependencys标签下即可!对于spring有可能需要间接依赖其他的jar,这你就不用管了,maven帮你搞定,这就是maven给我们带来的好处之一。

当然有间接依赖,那么你对于工程中具体被依赖进来多少包就不清楚了。而且jar冲突的事时有发生(其实即使你手动添加相应的jar,还是会遇到同样的问题,毕竟内部文件你不可能全部了解)。那么对于这种情况的出现,我们就需要将本工程所有依赖进来的jar全部列出来,这样有利于我们进行排查,也就是mvn dependency:tree > ***.txt的用处。

其实生成依赖树文件应该是到排除jar时期采用的。遇到冲突,我们一般的处理步骤为:1、查看错误日志,找到冲突的类(日志一般是报:找不到相应的类***);2、在eclipse中使用crtl+alt+t,输入冲突的类名字,看一共会出现几个类(前提是限制在本工程内进行查找)。出现多个,那就是问题的所在;3、将不正确的jar找到后,再从生成的依赖树文件,也即maven dependency:tree > ***.txt中找到该jar的gropupId与artifactId,再exclusion掉即可,如下:
依赖树文件:
一般如其中的一条依赖树: org.springframework:org.springframework.context:jar:3.0.1.RELEASE:compile,分别代表 gropupId:artifactId:packaging:version:时期。通过这个,我们就可以找出需要排查的jar的groupId与artifactId,如(排出时不需要指定版本):
<exclusions>
     <exclusion>
      <groupId>org.springframework</groupId>
      <artifactId>org.springframework.context</artifactId>
     </exclusion>
</exclusions>

上面已经将工作中常见的使用场景介绍了下。那么还有一个重点,还未介绍:那就是创建工程。其实对于maven来说仅是一条命令的事。

1、cmd进入你想创建工程的目录中,再运行以下命令:
mvn archetype:create -DgroupId=com.ankon.test -DartifactId=ankon -DpackageName=com.ankon.test
先解释下这条命令的含义:(1)archetype:create,表示用archetype 快速创建一个项目(在这条命令中,表示我生成的包为默认形式:jar包),(2)groupId/artifact/version,可以唯一制定一个jar包的座标,-DgroupId和-DartifactId参数也就是起到定位座标的功效,一般groupId是你所有公司或xxx的网址的倒序(这个大家都知道为倒序,而我只是测试,压根就没有test.ankon.com这个网址),-DartifactId其实从最终生成出的工程来看,就是指代你的工程名字了,大家可以按自己需要进行修改,(4)-DpackageName就是在你生成后的工程中,默认帮你添加的包目录

2、运行如下命令,生成eclipse可以导入的工程:
mvn eclipse:eclipse

3、导入看看目录结构:

4、生成jar包命令:
mvn clean install
在你工程的target目录下,就可以找到相应的snapshot版本的临时jar文件了。

5、那我想生成web工程怎么办?还是一条命令即可:
mvn archetype:create -DgroupId=com.ankon.test -DartifactId=ankonWeb -DarchetypeArtifactId=maven-archetype-webapp
其中:-DarchetypeArtifactId代表使用的项目骨架的类型 ,此处为web工程插件。
当然还有其他骨架类型如下:
* maven-archetype-archetype 
* maven-archetype-j2ee-simple 
* maven-archetype-mojo 
* maven-archetype-portlet 
* maven-archetype-profiles (currently under development) 
* maven-archetype-quickstart 
* maven-archetype-simple (currently under development) 
* maven-archetype-site 
* maven-archetype-site-simple 
* maven-archetype-webapp 
 
5.1 导入eclipse看看目录结构:

6、当开发时,有可能还会遇到这样的错误,编译时:

从此处就可以很明显的看出,我使用了注解,而注解是在JDK1.5之后才引入的,所以,需要将制定maven编译版本在JDK1.5之上
那么在根目录的pom.xml之中加入:

我在此处指定用1.6打包编译。

至此,可以告一段落。







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章