一、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. Markdown与标记语言

    Markdown 是一种轻量级的「标记语言」,它的优点很多,目前也被越来越多的写作爱好者,撰稿者广泛使用.看到这里请不要被「标记」.「语言」所迷惑,Markdown 的语法十分简单.常用的标记符号也不 ...

  2. [DUBBO]Dubbo控制台查看方法

    1.dubbo控制台安装方法网上较多,例如转载http://dtbuluo.com/blog/archives/37 2.dubbo控制台查看 由于我们组是开发安装的dubbo.zookeeper等等 ...

  3. TF-IDF算法学习报告

    TF-IDF是一种统计方法,这个算法在我们项目提取关键词的模块需要被用到,TF-IDF算法是用来估计 一个词汇对于一个文件集中一份文件的重要程度.从算法的定义中就可以看到,这个算法的有效实现是依靠 一 ...

  4. Git使用小记

    刚刚简答的完成了pureblog,想着先上传导Github上去,等着以后有时间了在完善其功能,所以使用Git上传导Github代码仓库上去,这里简答的记录以下使用小计. 我们首先下载Git,我们使用用 ...

  5. jquery1.7.2的源码分析(一)

    说到jquery可能是大家最经常用到的,在日常的编写程序中最经常使用到,在使用jquery插件的同时,深入的解读jquery源码有利于我们学到设计的思想和实现的技巧 在jquery源码的分析中,其中艾 ...

  6. net.sf.json.JSONException: There is a cycle in the hierarchy!的解决办法

    使用Hibernate manytoone属性关联主表的时候,如果使用JSONArray把pojo对象转换成json对象时,很容易出现循环的异常.解决的办法就是, 在转换json对象时忽略manyto ...

  7. 移动端页面调试神器-browser-sync

    最近公司赶一个项目,是mobile端,之前没怎么做过移动端的开发,这个项目算是个小尝试. 在做项目的过程中,用到了一个神器--browser-sync,在这里分享给大家. 1.静态页面调试 作为前端, ...

  8. 无法执行 FunctionImport“entitys.xx”,因为未将它映射到存储函数。EF

    EF突然报了一个这样的错误: 无法执行 FunctionImport"entitys.xx",因为未将它映射到存储函数.EF 其中xx是存储过程: 可能是因为我在.edmx文件中& ...

  9. linux防火墙开启端口

    1.使用命令查看端口开启情况(下图为安装时未选择开启防火墙) [root@fullstack ~]# iptables -L -n Chain INPUT (policy ACCEPT) target ...

  10. The current identity (NT AUTHORITY/NETWORK SERVICE)

    IIS错误提示: The current identity (NT AUTHORITY/NETWORK SERVICE) does not have write access to 'C:/WINDO ...