一、Maven概述

  1.什么是Maven?

    Maven中文意思是"行家"、"专家",它是一种跨平台的项目管理工具。

  2.Maven有什么作用?

    Maven能够实现基于Java平台的项目构建、依赖管理和项目信息管理。

  3.什么是理想的项目构建?

    高度自动化,跨平台,可重用组件,符合标准化的规范

  4.什么是依赖,为什么要进行依赖管理?

    自动下载,统一依赖管理,方便项目升级和修改

  5.项目信息包括哪些内容?

    项目名称描述、开发人员信息、开发者信息等。

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

  Eclipse插件更新地址:http://www.eclipse.org/m2e/

  安装过程见官方文档说明:http://maven.apache.org/install.htmlhttp://maven.apache.org/configure.html

二、Ant比较Maven

  Ant和Maven都是apache下的工程,在早些时候,Ant非常流行,像是spring框架和hibernate框架都使用了该项目管理工具进行项目的构建,但是现在到他们的官网上查看项目结构,可以看出,他们都已经使用Maven管理最新的项目了,为了实现过渡,中间曾经出现过Maven和Ant共存的情况,这样倒是方便了用户的选择,但是现在这种情况已经没有了,或者说极少出现了,现在各大公司都直接使用Maven管理项目而抛弃了Ant。

  1.Ant的劣势

    (1)没有一个约定的目录结构

    (2)必须明确让Ant做什么,什么时候做,然后编译、打包

    (3)没有生命周期,必须定义目标和其实现的任务序列

    (4)没有继承依赖管理

  2.Maven取代Ant的优势

    (1)拥有约定的目录结构,不需要配置Maven就知道你的代码放到了哪里

    (2)拥有一个生命周期,比如使用命令mvn install就可以自动执行编译、测试、打包、安装到Maven仓库等过程

    (3)拥有依赖管理、仓库管理

三、Maven的配置

  1.两种settings.xml配置文件

    *  MAVEN_HOME/conf/settings.xml,这是全局的配置文件

    *  ~/.m2/settings.xml配,这是单个用户的配置文件

  2.Maven约定的目录结构

    项目文件夹

      |------src                

          |------main                          

              |------java          //存放项目的java文件

              |------resources        //存放项目资源文件,如spring、hibernate的配置文件

          |------test              

              |------java          //存放所有测试的java文件

              |------resources        //存放测试需要的资源文件,如spring、hibernate的配置文件

      |------target                 //存放项目生成的目标代码、资源文件等

      |------pom.xml                 //项目核心配置文件

  3.pom.xml配置文件中的标签讲解

    详细配制方法见英文文档:http://maven.apache.org/pom.html

    POM是"Project Object Model"的英文缩写,

    (1)一个完整的pom.xml配置文件的格式如下:

 <project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <!-- The Basics -->
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<packaging>...</packaging>
<dependencies>...</dependencies>
<parent>...</parent>
<dependencyManagement>...</dependencyManagement>
<modules>...</modules>
<properties>...</properties> <!-- Build Settings -->
<build>...</build>
<reporting>...</reporting> <!-- More Project Information -->
<name>...</name>
<description>...</description>
<url>...</url>
<inceptionYear>...</inceptionYear>
<licenses>...</licenses>
<organization>...</organization>
<developers>...</developers>
<contributors>...</contributors> <!-- Environment Settings -->
<issueManagement>...</issueManagement>
<ciManagement>...</ciManagement>
<mailingLists>...</mailingLists>
<scm>...</scm>
<prerequisites>...</prerequisites>
<repositories>...</repositories>
<pluginRepositories>...</pluginRepositories>
<distributionManagement>...</distributionManagement>
<profiles>...</profiles>
</project>

    (2)最简单的配置文件格式:

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.kdyzm.hello</groupId>
<artifactId>Hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Hello</name> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency> </dependencies>
</project>

    根节点必须是project标签;

    modelVersion标志了POM的版本,maven2和maven3只支持4.0.0,而且该声明是必须的;

    groupId、artifactId、version是maven坐标组成的三大元素,这就涉及到了什么是maven坐标的问题;

    坐标,按照以前的理解,是用于唯一确定空间中某一点的度量,这里坐标有着相同的含义,它用来唯一标识一个项目,具体到某一个版本号,groupId、artifactId、version三个元素共同确定一个唯一的项目,它就像一个地址或者时间戳一样,一个项目使用它标识自己在maven库中的独一无二的位置。

    groupId:一般使用类似于com.kdyzm.main这种域名的形式来表示,体现在maven系统中,就是java包结构一样的东西,这个字段不需要非得用这种形式,但是使用这种形式更加清晰,就像maven,它的工程都放到了以org.apache.maven为groupId的文件夹中,体现在maven仓库,其实就是org/apache/maven

    artifacted:代表了工程的名字,不需要和真实的工程名字相一致,但是强烈推荐一致,方便记忆,不容易出错。

    version:版本号

    package:决定如果执行mvn package命令的话需要将项目生成的文件打包成什么样的类型,支持的类型如下:

      pomjarmaven-pluginejbwarearrarpar.

    dependencies:该标签的作用就是声明依赖的项目或者jar包,每一个依赖都是用dependendy标签来单独声明,声明的内容除了使用groupId、artifactId和version定位项目之外,还要有一个scope标签用来指定作用范围,其作用和java中的注解有些相似;理解这个需要先搞定maven项目的构建过程:

    

    scope的所有支持类型:

      compile:编译时有效,作用在上图中的编译阶段

      test:测试时有效,作用在上图中的测试阶段

      runtime:运行时有效,作用在测试阶段和以后的阶段

      provided:顾名思义,当该项目运行的容器中提供了该jar包的时候(测试运行的时候没有该环境),需要将该依赖声明为provided,这样jar包就不会拷贝到运行的容器中了,这样能够防止jar包冲突问题的发生。

      system:其作用和provided类似,但是需要除去一点,该jar包在本地maven库中不存在(有疑问)。

四、maven项目的生命周期

  什么是生命周期?从创建到死亡的过程就是生命周期,一个比较完整的声明周期如下:

  • validate
  • generate-sources
  • process-sources
  • generate-resources
  • process-resources                                                               复制并处理资源文件,至目标目录,准备打包。
  • compile                                                                                 编译项目的源代码
  • process-classes
  • generate-test-sources
  • process-test-sources
  • generate-test-resources
  • process-test-resources                                                             复制并处理资源文件,至目标测试目录。
  • test-compile                                                                           编译测试源代码。
  • process-test-classes
  • test                                                                                       使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署
  • prepare-package
  • package                                                                                  接受编译好的代码,打包成可发布的格式,如 JAR
  • pre-integration-test
  • integration-test
  • post-integration-test
  • verify
  • install                                                                                     将包安装至本地仓库,以让其它项目依赖
  • deploy                                                                                    将最终的包复制到远程的仓库,以让其它开发人员与项目共享。

  maven能够实现高度的自动化,当我们执行mvn compile命令的时候,其生命周期之前的命令都会依次执行一遍;同理,当我们执行mvn test命令的时候,包括mvn compile命令在内,其之前的命令都会依次执行一遍。

五、两个简单项目的练习

  1.Hello项目,以下是maven项目的实际结构示意图

  Hello

    |------src

        |------main

            |------java

                |------com/kdyzm/main/Hello.java

            |------resources

        |------test

            |------java    

                |------com/kdyzm/main/test/HelloTest.java

            |------resources

    |------target

    |------pom.xml

 package com.kdyzm.main;
public class Hello
{
public int calculate(int input){
System.out.println("得到输入参数是:"+input);
return input*input;
}
}

com.kdyzm.main.Hello.java

 package com.kdyzm.main.test;

 import org.junit.Test;
import com.kdyzm.main.Hello;
public class HelloTest
{
@Test
public void testHello(){
Hello hello=new Hello();
int result=hello.calculate(2);
System.out.println("计算得到的结果是:"+result);
}
}

com.kdyzm.main.test.HelloTest.java

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.kdyzm.hello</groupId>
<artifactId>Hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Hello</name> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency> </dependencies>
</project>

Hello/pom.xml

  使用maven命令进行管理:            

  1. mvn compile                       该命令能够将源代码编译,生成的class文件保存到了target文件夹中。
  2. mvn clean                           该命令能够将target文件夹删除掉
  3. mvn clean test                 该命令是一个组合命令,它能够先执行mvn clean命令,再执行mvn test命令
  4. mvn package                       该命令是一个打包的命令,根据配置文件的不同,它会将生成的文件打包成不同的类型
  5. mvn install                          该命令会先将项目打包,之后再将相关的jar包和配置文件拷贝到maven仓库中
  6. mvn clean install                  该命令也是一个组合命令,它能够先执行mvn clean命令,然后执行mvn install命令

  2.HelloFriend项目

  HelloFriend

    |------src

        |------main

            |------java

                |------com/kdyzm/main/HelloFriend.java

            |------resources

        |------test

            |------java

                |------com/kdyzm/main/test/HelloFriendTest.java

            |------resources

    |------target

    |------pom.xml

 package com.kdyzm.main;
import com.kdyzm.main.Hello;
public class HelloFriend{
public String sayHello(int input){
System.out.println("HelloFriend类sayHello方法接收到的参数是:"+input);
Hello hello = new Hello();
int result=hello.calculate(input);
return result+"";
}
}

com.kdyzm.main.HelloFriend

 package com.kdyzm.main.test;
import com.kdyzm.main.HelloFriend;
import org.junit.Test;
public class HelloFriendTest
{
@Test
public void testSayHello(){
HelloFriend helloFriend=new HelloFriend();
String result=helloFriend.sayHello(2);
System.out.println("testSayHello的执行结果是:"+result);
}
}

com.kdyzm.main.test.HelloFriendTest.java

<!--pom.xml配置文件-->
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.kdyzm.hello</groupId>
<artifactId>HelloFriend</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>HelloFriend</name> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency> <dependency>
<groupId>com.kdyzm.hello</groupId>
<artifactId>Hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency> </dependencies>
</project>

六、maven仓库

  当执行完成mvn install命令的时候,打包成jar的项目和相关配置文件就会保存到maven仓库中以便于向其他项目提供依赖,保存的目录是:~/.m2/repository/$groupId/$artifactId

  例如以上两个项目执行完成mvn install命令之后,如果没有错误,那么在我电脑对应的目录上就会出现一下文件和目录:

  

【Java EE 学习 82 上】【MAVEN基本安装和使用方法】的更多相关文章

  1. 【Java EE 学习 79 上】【mybatis 基本使用方法】

    一.简介 mybatis类似于hibernate,都是简化对数据库操作的框架,但是和hibernate不同的是,mybatis更加灵活,整体来说框架更小,这体现在它需要我们手写SQL语句,而hiber ...

  2. 【Java EE 学习 82 下】【MAVEN整合Eclipse】【MAVEN的一些高级概念】

    一.MAVEN整合Eclipse MAVEN是非常优秀,但是总是要开命令行敲命令是比较不爽的,我们已经习惯了使用IDE,所以还有一种将MAVEN整合到Eclipse的方法. 详情查看:http://w ...

  3. 【Java EE 学习 80 上】【WebService】

    一.WebService概述 什么是WebService,顾名思义,就是基于Web的服务,它使用Http方式接收和响应外部系统的某种请求,从而实现远程调用.WebService实际上就是依据某些标准, ...

  4. 【Java EE 学习 74 上】【数据采集系统第六天】【使用Jfreechart的统计图实现】【Jfreechart的基本使用方法】

    之前已经实现了数据的采集,现在已经有了基本的数据,下一步就需要使用这些数据实现统计图的绘制了.这里使用Jfreechart实现这些统计图的绘制.首先看一下Jfreechart的基本用法,只有知道了它的 ...

  5. 【Java EE 学习 25 上】【网上图书商城项目实战】

    一.概述 1.使用的jdk版本:1.6 2.java EE版本:1.6 3.指导老师:传智播客 王建 二.小项目已经实现的功能 普通用户: 1.登陆 2.注册 3.购物 4.浏览 管理员用户(全部管理 ...

  6. 【Java EE 学习 67 上】【OA项目练习】【JBPM工作流的使用】

    OA项目中有极大可能性使用到JBPM框架解决流程控制问题,比如请假流程.报销流程等等. JBPM:JBoss Business Process Management,翻译过来就是业务流程管理.实际上就 ...

  7. 【Java EE 学习 83 上】【SpringMVC】【基本使用方法】

    一.SpringMVC框架概述 什么是SpringMVC?SpringMVC是一个和Struts2差不多的东西,他们的作用和性质几乎是相同的,甚至开发效率上也差不多,但是在运行效率上SpringMVC ...

  8. 【Java EE 学习 78 上】【数据采集系统第十天】【Service使用Spring缓存模块】

    一.需求分析 调查问卷中或许每一个单击动作都会引发大量的数据库访问,特别是在参与调查的过程中,只是单击“上一页”或者“下一页”的按钮就会引发大量的查询,必须对这种问题进行优化才行.使用缓存策略进行查询 ...

  9. 【Java EE 学习 77 上】【数据采集系统第九天】【通过AOP实现日志管理】【通过Spring石英调度动态生成日志表】【日志分表和查询】

    一.需求分析 日志数据在很多行业中都是非常敏感的数据,它们不能删除只能保存和查看,这样日志表就会越来越大,我们不可能永远让它无限制的增长下去,必须采取一种手段将数据分散开来.假设现在整个数据库需要保存 ...

随机推荐

  1. Python Day15

    JavaScript JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处理. ...

  2. Java数据结构——平衡二叉树的平衡因子(转自牛客网)

    若向平衡二叉树中插入一个新结点后破坏了平衡二叉树的平衡性.首先要找出插入新结点后失去平衡的最小子树根结点的指针.然后再调整这个子树中有关结点之间的链接关系,使之成为新的平衡子树.当失去平衡的最小子树被 ...

  3. Intellij Idea/Webstorm/Phpstorm 版本控制忽略文件

    本地差异化配置,不需要提交,这时候需要在整个版本控制中忽略掉文件的提交. File -> Settings -> Version Control -> Ignored Files

  4. 前端构建工具之gulp_常用插件

    gulp常用插件的使用 今天来看看一下gulp的常用插件的使用 就像gruntjs需要一个Gruntfile.js文件一样,gulp也需要一个文件作为它的主文件,在gulp中这个文件叫做gulpfil ...

  5. jQuery stop()用法

    jQuery stop()的用法: stop(true)等价于stop(true,false): 停止被选元素的所有加入队列的动画. stop(true,true):停止被选元素的所有加入队列的动画, ...

  6. bzoj4555题解

    我们计算$f(i)=\sum_{j=1}^i S(i,j)\times 2^j\times (j!)$,容(o)易(e)知(i)道(s)$f(i)$的指数生成函数为$\frac{1}{3-2\time ...

  7. Ajax深入解析

    AJAX:Asynchronous JavaScript And Xml(异步的JS和XML) 同步:客户端发起请求>服务端的处理和响应>客户端重新载入页面(循环) 异步:客户端实时请求& ...

  8. 修改Firebug字体

    Firebug是一件非常好用的调试工具,然而默认的字体有些单调,设置里又没有更改的选项,那么字体到底能不能更改呢?这个问题困扰了我好久,直到今天我才偶然发现了解决方案. Firebug属于火狐的一个插 ...

  9. Eclipse导出插件工程

    一.Feature Projecties工程设置 1. 新建一个Feature Projecties 2. 选择我们的插件工程,finish 3. 在目录下新建一个Category definitio ...

  10. 2. 上传Android代码到github

    1. 建立git仓库     cd到本地项目根目录,执行git命令     git init          同时会在项目根目录下生成一个.git的隐藏文件          windows下先禁用 ...