一、Maven介绍

1.1 什么是maven?

  Maven是apache下的一个纯Java开发的开源项目,它是一个项目管理工具,使用maven对Java项目进行构建、依赖管理。

1.2 什么是项目构建?

  项目构建是一个项目从编写源代码到编译、测试、运行、打包、部署、运行的过程。

  • 传统项目构建过程

  传统使用eclipse构建项目的过程如下:

    

  构建过程如下:

    1. 在eclipse中创建一个javaweb工程
    2. 在工程中编写源代码及配置文件等
    3. 对源代码进行编译,java文件编译成class文件
    4. 执行Junit单元测试
    5. 将工程打包成war包部署至tomcat运行
  • maven项目构建过程  

  maven将项目构建的过程进行标准化,每个阶段使用一个m命令完成,下图展示了构建过程的一些阶段:

  

  上图中部分阶段对应的命令如下:

清理阶段:clean,清理输出的class文件
编译阶段:compile,将java代码编译成class文件
打包阶段:package,java工程可以打成jar包,web工程可以打成war包

  运行一个maven工程(web工程)需要一个命令:tomcat:run

1.3 什么是依赖管理

  什么是依赖?一个java项目可能要使用一些第三方的jar包才可以运行,那么我们说这个java项目依赖了这些第三方jar包。

  举个例子:一个crm系统,它的架构是SSH框架,该crm项目依赖SSH框架,具体它依赖的是hibernate、spring、struts2。

  什么是依赖管理?就是对项目所有依赖的jar包进行规范化管理

  • 传统项目的依赖管理

  传统的项目工程要管理所依赖的jar包完全靠人工进行,程序员从网上下载jar包添加到项目工程中,如下图:程序员手工将hibernate、spring、struts2的jar包添加到工程中的WEB-INF/lib目录下。

    

  手工拷贝jar包添加到工程中的问题是:

    1. 没有对jar包的版本统一管理,容易导致版本冲突。
    2. 从网上找jar包非常不方便,有些jar包找不到。
    3. jar包添加到工程中导致工程过大。

      

  • maven项目的依赖管理

  maven项目管理所依赖的jar包不需要手动向工程添加jar包,只需要在pom.xml(maven工程的配置文件)添加jar包的坐标,自动从maven仓库中下载jar包、运行,如下图:

    

  使用maven依赖管理添加jar包的好处:

    1. 通过pom.xml文件对jar包的版本进行统一管理,可避免版本冲突。
    2. maven团队维护了一个非常全的maven仓库,里面包含了当前使用的jar包,maven工程可以自动从maven仓库下载jar包,非常方便。
    3. 使用maven的项目工程非常小

      

1.4 使用maven的好处

  1. 一步构建:maven对项目构建的过程进行标准化,通过一个命令即可完成构建过程。
  2. 依赖管理:maven工程不用手动导入jar包,通过在pom.xml中定义坐标从maven仓库自动下载,方便且不易出错。
  3. 可以跨平台:可在window、Linux上使用。
  4. 有利于提高大型团队的开发效率,降低项目的维护成本,大公司都会考虑使用maven来构建项目。

二、maven的安装

  安装需要Java支持(JDK >= 1.7)

2.1 下载安装

  • 下载压缩包:

  官方下载地址:http://maven.apache.org/download.cgi

  

  • 解压安装:

  将下载好的压缩包解压到一个不含有中文和空格的目录中。

  

  bin:mvn.bat(以run方式运行项目)、mvnDeug.bat(以debug方式运行项目)

  boot:maven运行需要类加载器

  conf:settings.xml,整个maven工具核心配置文件

  lib:maven运行所依赖的jar包

2.2 配置环境变量

  计算机』-->『右键属性』-->『高级系统设置』-->『环境变量』-->『系统变量』

  

  将%MAVEN_HOME%\bin添加到path中:

  

  通过mvn -v命令检查maven是否安装成功,看到maven的版本为3.3.9及java版本为1.7即为安装成功。

  

2.3 maven仓库

2.3.1 maven仓库的作用

  maven的工作需要从仓库下载一些jar包,如下图所示,本地的项目A、项目B等都会通过maven软件从远程仓库(可以理解为互联网上的仓库)下载jar包并存在本地仓库,本地仓库就是本地文件夹,当第二次需要此jar包时则不再从远程仓库下载,因为本地仓库已经存在了,可以将本地仓库理解为缓存,有了本地仓库就不用每次从远程仓库下载了。

  下图描述了maven中仓库的类型:

    

  • 本地仓库:用来存储从远程仓库或中央仓库下载的插件和jar包,项目使用的插件或jar包,优先从本地仓库查找。默认本地仓库位置在${user.dir}/.m2/reposity,${user.dir}表示Windows用户目录

        

  • 远程仓库:如果本地需要插件或者jar包,本地仓库没有,默认去远程仓库下载。远程仓库可以在互联网内也可以在局域网内。
  • 中央仓库:在maven软件中内置一个远程仓库地址http://repo1.maven.org/maven2,它是中央仓库,服务于整个互联网,它是由maven团队自己维护的,里面存储了非常全的jar包,它包含了世界上大部分流行的开源项目构件。

2.3.2 配置本地仓库

  将准备好的本地仓库(repository.rar)解压到自己的电脑上

    

  在MAVEN_HOME/conf/settings.xml文件中配置本地仓库位置:

    

    

三、入门程序

3.1 maven的目录结构

  使用maven创建的工程我们称它为maven工程,maven工程具有一定的目录规范,如下:

    

3.2 maven的常用命令

  • compile:compile是maven工程的编译命令,作用是将src/main/java下的文件编译为class文件输出到target目录下

  

  查看target目录,class文件已生成,编译完成。

  

  • test:test是maven工程的测试命令,会执行src/test/java下的单元测试类

  

  • clean:执行clean会删除target目录的内容。
  • package:package是maven工程的打包命令,对于Java工程执行package会打包成jar包,对于web工程,会打包成war包。

    

  • install:install是maven工程的安装命令,执行install将maven打成jar或war包发布到本地仓库。

四、项目构建

4.1 m2e插件安装配置

4.1.2 eclipse与maven

  通过入门程序中命令行的方式使用maven的工作效率不高,可以在eclipse开发工具中集成maven软件,eclipse是一个开发工具,maven是一个项目管理工具,maven有一套项目构建的规范,在eclipse中集成maven软件,最终通过eclipse创建maven工程。

4.1.3 安装插件

  1.选择3.3.9版本的maven软件

    

  2.修改默认的本地仓库地址

    

    注意:如果修改了settings.xml文件,需要点击上图的"Update Settings"按钮对本地仓库重建索引,点击"Reindex"。

  3.maven配置完成需要测试在eclipse中是否可以浏览maven的本地仓库,如果可以正常浏览maven本地仓库,则说明eclipse集成maven已经完成。

   打开eclipse仓库视图

    

  找到Local respository本地仓库项,点击Rebuild index重建索引

  

  重建索引完成后即可查看本地仓库内容:

  

4.2 构建web工程

  第一步:创建一个maven工程

    

    

  第二步:定义坐标

    

    

  第三步:设置编译版本:查看上边工程的编译版本为1.5,此教程的是jdk1.7,需要设置编译版本为1.7,这里需要使用maven的插件来设置。在pom.xml中加入:

<build>
<!-- 配置了很多插件 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>

  执行update project,查看编译版本为1.7:

  

  第四步:定义web.xml:在src/webapp中添加WEB-INF/web.xml文件,可以右键项目自动生成

    

  第五步:添加servlet/jsp的jar包,在pom.xml中添加servlet/jsp的坐标

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
</dependencies>

  此时会发现jar包已添加到项目中:

  第六步:编写servlet,在src/main/java中创建ServletTest。

public class ServletTest extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.getRequestDispatcher("/jsp/test.jsp").forward(req, resp);
}
}

  第七步:编写jsp

    

  第八步:在web.xml中配置servlet

 <!-- 配置servlet -->
<servlet>
<servlet-name>servletTest</servlet-name>
<servlet-class>cn.itcast.maven.ServletTest</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletTest</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>

  第九步:启动项目:右击项目---run as –maven build ….

    

  测试:

    

五、依赖管理

5.1 添加依赖

5.1.1 dependency

  在pom.xml中添加dependency标签:

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>

5.1.2 查找坐标

  添加依赖需要指定依赖jar包的坐标,但是很多情况下我们是不知道jar包的坐标,可以通过如下方式查询:

    

    

     

  • 方式二:使用maven插件的索引功能

    如果在本地仓库中有我们要的jar包,可以在pom.xml中右键添加依赖

    

    

5.2 依赖范围

  A依赖B,需要在A的pom.xml文件中添加B的坐标,添加坐标时需要指定依赖范围,依赖范围包括:

  • compile:编译范围,指A在编译时依赖B,此范围为默认依赖范围。编译范围的依赖会用在编译、测试、运行,由于运行时需要,所以编译范围的依赖会被打包。
  • provided:provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用,provided依赖在编译和测试时需要,在运行时不需要(防止和tomcat下的jar包冲突),比如:servlet api被tomcat容器提供。
  • runtime:runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如jdbc的驱动包,由于运行时需要,所以runtime范围的依赖会被打包。
  • test:test范围依赖在编译和运行的时候都不需要,它们只有在测试编译和测试运行阶段可用。比如:junit,由于运行时不需要,所以test范围的依赖不会被打包
  • system:system范围依赖与provided类似,但是你必须显示的提供一个对于本地系统中JAR文件的路径,需要指定systemPath磁盘路径,system依赖不推荐使用。

    

    依赖范围由强到弱的顺序是:compile>provided>runtime>test

Maven学习笔记(一)—— Maven基础的更多相关文章

  1. MAVEN学习笔记之Maven插件的应用(4)

    MAVEN学习笔记之Maven插件的应用(4) <build> <pluginManagement> <plugins> <plugin> <gr ...

  2. MAVEN学习笔记之Maven生命周期和插件简介(3)

    MAVEN学习笔记之Maven生命周期和插件简介(3) clean compile site三套生命周期相互独立. clean pre-clean 执行清理前的工作 clean 清理上一次构建生成的所 ...

  3. Maven学习笔记:Maven简介

    Maven的概念 Maven是基于项目对象模型(POM,Project Object Model),可以通过描述信息来管理项目的构建,报告和文档的软件管理工具 Maven除了以程序构建能力为特色之外, ...

  4. MAVEN学习笔记之基础(1)

    MAVEN学习笔记之基础(1) 0.0 maven文件结构 pom.xml src main java package resource test java package resource targ ...

  5. Maven学习笔记-03-Eclipse下maven项目在Tomcat7和Jetty6中部署调试

    现在最新的Eclipse Luna Release 已经内置了Maven插件,这让我们的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目既可以部署在Tomcat也可 ...

  6. Maven学习笔记-04-Eclipse下maven项目在Tomcat7和Jetty6中部署调试

    现在最新的Eclipse Luna Release 已经内置了Maven插件,这让我们的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目既可以部署在Tomcat也可 ...

  7. Maven学习笔记—仓库

    Maven仓库 1 什么是Maven仓库 在Maven中,任何一个依赖.插件或者项目构建的输出,都可以成为构件,而Maven通常在某个位置统一的存储所有Maven项目共享的构件,这个统一的位置就是Ma ...

  8. MAVEN学习笔记之私服Nexus(2)

    MAVEN学习笔记之私服Nexus(2) 私有服务器搭建 Nexus www.snatype.org下载 snatype-work 是默认nexus存储nexus a:将bin添加到环境中 Admin ...

  9. Maven 学习笔记(二)

    前面一文——Maven 学习笔记(一)中已经提到了 pom 的大部分配置,Maven 本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给创建来完成,每一个任务都会对应一个插件 ...

  10. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

随机推荐

  1. eclipse生成的web项目在resin服务器上的发布(不能解析web.xml)

    首先报错误: web项目web.xml文件如下: <?xml version="1.0" encoding="UTF-8"?> <web-ap ...

  2. PHP Curl请求Https接口

    在请求http的时候只需要 file_get_contents("http://www.sojson.com/open/api/weather/json.shtml?city=$Positi ...

  3. Memcached 原理

    memcached  是以一个守护进程的方式运行于一个服务器和多个服务器之间的,等待接受客户端的连接操作,客户端可以有各种语言编写.(例如PHP). php 在客户端与服务器建立连接以后,接下来的事情 ...

  4. PCL struct“flann::SearchParams参数错误

    最近在使用PCL的KdTreeFLANN的时候报错:error C2079: “pcl::KdTreeFLANN<PointT>::param_radius_”使用未定义的 struct“ ...

  5. Apache htdigest命令

    一.简介 htdigest命令是Apache的Web服务器内置工具,用于创建和更新储存用户名.域和用于摘要认证的密码文件.服务器上的资源可以被限制为仅允许由htdigest建立的文件中的用户访问.使用 ...

  6. tensorflow 中 feed的用法

    Feed 上述示例在计算图中引入了 tensor, 以常量或变量的形式存储. TensorFlow 还提供了 feed 机制, 该机制 可以临时替代图中的任意操作中的 tensor 可以对图中任何操作 ...

  7. jquery dropdownlist.js

    $.fn.extend({ SetDict: function (option) { var txtControl = $(this); if (!txtControl.hasClass(" ...

  8. python解释器的下载和安装

    1.python解释器的下载 python这样的语言,需要一个解释器.而且解释器还有多种语言的实现,我们介绍的是最常用的C语言的实现,称之为Cpython.Python通过在各种操作系统上都有各自的解 ...

  9. Eclipse工具

    1 ArrayList的常见方法 * a: add(参数) 向集合中添加元素 * b: get(int index) 取出集合中的元素,get方法的参数,写入索引 * c: size() 返回集合的长 ...

  10. Android 中menu在activity中的使用

    1.在res下选择new  选择Android resource directory 2.在弹出框中Resource type选择menu 3.在res下就可以看到menu文件夹 4.在menu文件夹 ...