Maven使用入门/安装/配置

Maven使用入门

1. Maven概述

Maven是什么?
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。
为什么要使用Maven?
Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。
Maven的特点
Maven 和 Ant 有什么不同呢?在回答这个问题以前,首先要强调一点:Maven 和 Ant 针对构建问题的两个不同方面。Ant 为 Java 技术开发项目提供跨平台构建任务。Maven 本身描述项目的高级方面,它从 Ant 借用了绝大多数构建任务。因此,由于 Maven 和 Ant代表两个差异很大的工具,所以接下来只说明这两个工具的等同组件之间的区别,如表 1 所示:

表1

Maven常用命令

mvn archetype:generate 创建Maven项目
mvn compile 编译源代码
mvn deploy 发布项目
mvn test-compile 编译测试源代码
mvn test 运行应用程序中的单元测试
mvn site 生成项目相关信息的网站
mvn clean 清除项目目录中的生成结果
mvn package 根据项目生成的jar
mvn install 在本地Repository中安装jar
mvn eclipse:eclipse 生成eclipse项目文件
mvnjetty:run 启动jetty服务
mvntomcat:run 启动tomcat服务
mvn clean package -Dmaven.test.skip=true:清除以前的包后重新打包,跳过测试类

Maven的基本功能

• 构建:比如生成class、jar、war或者ear文件
• 生成文档:比如生成javadoc、网站文档
• 生成报告:比如junit测试报告
• 生成依赖类库:生成文档,说明项目多其他软件的依赖
• 有关SCM:SCM(Software Configuration Management),软件配置管理,比如版本控制,比如bug管理等等
• 发布:生成供发布的分发包,比如生成Struts2的分发包,供提交给用户使用
• 部署:比如,web应用程序,自动部署到指定的服务器上

maven的其他优势

  • maven不仅是构建工具,它还是依赖管理工具和项目管理工具,提供了中央仓库,能够帮我们自动下载构件。
  • 为了解决的依赖的增多,版本不一致,版本冲突,依赖臃肿等问题,它通过一个坐标系统来精确地定位每一个构件(artifact)。
  • 帮助我们分散在各个角落的项目信息,包括项目描述,开发者列表,版本控制系统,许可证,缺陷管理系统地址。
  • maven还为全世界的java开发者提供了一个免费的中央仓库,在其中几乎可以找到任何的流行开源软件。通过衍生工具(Nexus),我们还能对其进行快速搜索
  • maven对于目录结构有要求,约定优于配置,用户在项目间切换就省去了学习成本。

2. Maven 安装以及eclipse配置

  1. 在apche官方网站http://maven.apache.org/download.cgi 下载bin;
  2. 下载下来之后,解压,找个路径放进去, 把bin的位置设在环境变量里,新建环境变量MAVEN_HOME;


  3. 在PATH里加入maven的bin的路径;


  4. 由于Maven依赖Java运行环境,因此使用Maven之前需要配置Java的运行环境。下载并安装JDK,配置JDK的环境变量JAVA_HOME,否则maven将无法使用;
  5. 配置完毕后,在Windows命令提示符下,输入mvn -v测试一下,配置成功显示如图:


  6. 配置成功后开始在Eclipse中配置Maven,点击eclipse菜单栏Help->Eclipse Marketplace搜索关键字maven到插件Maven Integration for Eclipse 并点击安装即可,如下图:




  7. 安装完毕后,点击重启eclipse;
  8. 重启后,为了使得Eclipse中安装的Maven插件,同windows中安装的那个相同,需要让eclipse中的maven重新定位一下,点击Window -> Preference -> Maven -> Installation -> Add进行设置


  9. 然后, 我们在Maven的配置界面,设置User Settings Global Settings选择maven 安装目录下conf文件夹下的settings.xml,这里我的Maven安装目录为D:\apache-maven-3.5.2\conf\settings.xml,选择你的Maven安装目录,检查Local Repository 项,如果为D:\Qrsoft\maven\repository则配置成功,否则重新配置上一步。


  10. 设置成功即安装完成。

3. 使用

3.1 创建Maven项目
  1. 我们在Eclipse菜单栏中点击File->New->Other->Maven,在弹出的对话框中会看到,如下图所示:


  2. 选择Maven Project,请选中Create a simple project(skip archetype selection),之后点击Next;
  3. 选择”maven-archetype-webapp";



    填写Group id和Artifact id, Version默认,Packaging默认为jar,Name,Description选填,其他的不填(这里我已经创建过该项目了,所以会提示already exists) 。


  4. 创建好项目后,目录如下:


  5. 至此,项目已经创建完毕,下边开始配置;
  6. 添加Source Folder:
    Maven规定,必须创建以下几个Source Folder
    src/main/resources
    src/main/java
    src/test/resources
    src/test/java
    添加以上的Source Folder(如果已经存在,可忽略此步骤),添加完后,如下图所示:


  7. 配置Build Path;



    设定4个文件夹的输出Output folder,双击修改:



    分别修改输出路径为
    src/main/resources  对应  target/classes

    src/main/java  对应  target/classes
    src/test/resources  对应  target/test-classes
    src/test/java  对应  target/test-classes

修改后如下图:


  1. 设定Libraries


  2. 完成,接下来就可以编写自己的程序了。
3.2 Maven项目的目录约定
3.3 pox.xml解读

(1). modelVersion
指定了当前Maven模型的版本号,对于Maven2和Maven3来说,它只能是4.0.0;
(2). groupId
顾名思义,这个应该是公司名或是组织名。一般来说groupId是由三个部分组成,每个部分之间以"."分隔,第一部分是项目用途,比如用于商业的就是"com",用于非营利性组织的就是"org";第二部分是公司名,比如"tengxun"、"baidu"、"alibaba";第三部分是你的项目名
(3). artifactId
可以认为是Maven构建的项目名,比如你的项目中有子项目,就可以使用"项目名-子项目名"的命名方式
(4). Version
版本号,SNAPSHOT意为快照,说明该项目还在开发中,是不稳定的版本。在Maven中很重要的一点是,groupId、artifactId、version三个元素生成了一个Maven项目的基本坐标,这非常重要!
在上面的这些元素之外,还有一些元素,同样罗列一下:

  1. Packing
    项目打包的类型,可以使jar、war、rar、ear、pom,默认是jar;
  2. dependencies和dependency
    前者包含后者。前面说了,Maven的一个重要作用就是统一管理jar包,为了一个项目可以build或运行,项目中不可避免的,会依赖很多其他的jar包,在Maven中,这些依赖就被称为dependency。

说到这里,就有一个本地仓库远程仓库的概念了。官方下载的本地仓库的配置在"%MAVEN_HOME%\conf\settings.xml"里面,找一下"localRepository"就可以了(可以自己定义下载下来的jar包的存放位置,见https://www.cnblogs.com/xdp-gacl/p/3498271.html );MyEclipse默认的本地仓库的地址在"{user.home}/.m2/repository"路径下,同样找一下"localRepository"就可以找到MyEclipse默认的本地仓库了。

本地仓库和远程仓库是这样的,Maven工程首先会从本地仓库中获取jar包,当无法获取指定jar包时,本地仓库会从远程仓库(中央仓库)中下载jar包,并放入本地仓库以备将来使用。

举个例子,比方说我的项目中用到了MyBatis,那么可以这么配置:

<dependencies>

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis</artifactId>

<version>3.2.5</version>

</dependency>

</dependencies>

之前有说过groupId、artifactId、version唯一标识一个Maven项目,有了这三个元素,我们就可以去远程仓库下载MyBatis3.2.5.jar到本地仓库了。回想我们之前的做法,如果要MyBatis的jar包,发现没有,然后去网上下载一个,需要另外的jar包,然后去网上下载一个,但是有了Maven,就方便多了,只需要配置jar包对应的dependency依赖,Maven会自动帮助我们去远程仓库中下载jar包到本地仓库中。

  1. properties
    properties是用来定义一些配置属性的,例如project.build.sourceEncoding(项目构建源码编码方式),可以设置为UTF-8,防止中文乱码,也可定义相关构建版本号,便于日后统一升级。
  2. build
    build表示与构建相关的配置,比如build下有finalName,表示的就是最终构建之后的名称。
3.4添加本地jar包
  1. 首先我在项目根目录中创建一个lib文件夹,将jar包拷贝到lib文件夹下:


  2. 然后我们在maven的pom.xml中配置:
    <dependency>
    <groupId>com.localjar.jar1</groupId>
    <artifactId>jar1</artifactId>
    <version>0.0.1</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/hadoop-ext.jar
    </systemPath>
    </dependency>
    <dependency>
    <groupId>com.localjar.jar2</groupId>
    <artifactId>jar2</artifactId>
    <version>0.0.1</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/mr.proj.jar
    </systemPath>
    </dependency>
    这里的groupId和artifactId以及version都是可以随便填写的 ,scope必须填写为system,而systemPath写现在我们jar包的地址就可以了;
3.5 添加外部jar包
  1. 去mvnrepository 官网 http://mvnrepository.com/ 查找需要的jar包,复制dependency代码到pom.xml中即可。
    例如想查找org.apache.commons.lang.StringUtils,可以输入commons,


    点一个适合的版本,例如我选2.6:

    把代码拷贝到pom的<dependencies></ dependencies >中即可。

4. Maven入门使用常见问题

说明:这些问题有的是从网上找的,有的是我自己遇到的,能否解决您的问题视情况而定,具体问题还要具体分析,不行就找度娘哈。

  1. 我从SVN上下载了一个以Maven构建的工程,下载完毕没有jar包怎么办?
    从资源库上下载下来的Maven工程,是没有jar包的,此时可以这么做:
    (1)删除Maven工程,但是删除的时候不要删除本地工程里面的Maven工程,只删除MyEclipse中的Maven工程
    (2)右键Import->Maven4MyEclipse->Existing Maven Projects,导入你的Maven工程,此时MyEclipse在构建工程的时候,假如你的本地仓库中没有dependcy中的jar包,便会去远程仓库下载jar包到本地仓库中。你的工程导入完毕之后,Library应该是这样的:


  2. 重新下载Maven工程所依赖的jar包、导入jar包都需要触发Maven工程的build workspace,那么如何才能触发Maven工程的build workspace?
    找到一个pom.xml,随便修改一下,加一个空格、减一个空格什么的,ctrl+s保存一下,便会触发Maven工程的build workspace了
  3. 本地仓库的目录结构是什么样子的?
    groupId、artifactId、version确定一个唯一的Maven,比方说我有一个mybatis的dependcy:
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.2.5</version>
    </dependency>
    那么mybatis的jar包应该在%Maven仓库地址%\org\mybatis\mybatis\3.2.5\这一路径下,看到了吧,先groupId,再mybatis,最后version,每个名字都是一个文件夹的名字
  4. 有些jar包在dependcy里面有配置,Import了Maven工程,下载完工程所依赖的jar包之后,发现本地仓库里面却没有,怎么办?
    可能是原先下载jar包的时候出了什么问题,从artifactId目录开始删除以下的所有文件/文件夹,然后触发一次Maven工程的build workspace就可以了
  5. 本地仓库中确定已经有jar包了,工程里面却报错,说找不到jar包,该怎么办?
    应该有很多解决办法,目前解决的一种办法是,MyEclipse->Window->Preferences->搜索Maven->User Settings,Update Settings和Reindex点一下就好了。另外,可以尝试一下把本地Maven仓库内的jar包删除一下,然后重新build workspace,可能也可以。
  6. 项目上有红叉提示错误,但是整个项目没有任何文件有错,怎么办?
    解决办法就是:
    右键项目,【Maven】--》【Update Project Configuration...】即可。
  7. Maven构建项目后项目报Error错误Java compiler level does not match the version of the installed Java project facet。
    项目->右键->Project Facets->修改facets中java版本(下拉箭头出)为要用的版本
    Maven构建项目需注意
    1.项目右键->Preferences->buildpath->jdk版本
    2.项目右键->Preferences->javacompiler->jdk版本
    3.项目右键->Preferences->ProjectFacets->jdk版本

先讲这些哈,如有错误,欢迎指正。
喜欢别忘点个攒哈,笔芯~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270