Maven的使用《一》之环境配置和概念

来源:互联网 发布:vod点播软件 编辑:程序博客网 时间:2024/06/04 18:58

问题?maven是什么,作用是什么,怎么用,达到怎样的一个目的?

1.定义

现在几乎Maven已经成为了所有Java开源项目的标配,Struts、Hibernate、 Ehcache等知名的开源项目都使用Maven进行管理。国内也有越来越多的知名的软件公司开始使用Maven管理他们的项目,如阿里巴巴和淘宝。
struts2-core-2.3.14.2.jar\META-INF\maven\org.apache.struts\struts2-core\pom.xml
hibernate3.jar\ hibernate-distribution-3.5.6-Final.pom


  Maven——这一Java社区事实标准的项目管理工具,能帮你从琐碎的手工劳动中解脱出来,帮你规范整个组织的构建系统。不仅如此,它还有依赖管理、自动生成项目站点等超酷的特性。每天都有数以万计的开发者在访问中央仓库以获取他们需要的依赖。


Maven:翻译为“专家”或“内行”。
  Maven是跨平台的项目管理工具。作为Apache组织中的一个颇为成功的开源项目,主要服务于基于java平台的项目构建、依赖管理和项目信息管理。无论是小型的开源类库项目,还是大型的企业级应用;无论是传统的瀑布式开发,还是流行的敏捷模式,Maven都能大显身手。


2.作用

(1):自动构建(傻瓜化,高度自动化,一步构建)

(2):依赖管理(自动下载相关的jar包,统一依赖管理)

(3):项目信息管理(项目信息、开发人员信息、开发者信息,文档自动生成)



3.主要内容(理解)

(1)为什么要使用Maven

理由:普通的eclipse或者myeclispe项目都需要经过手工操作多次编译、测试、部署等独立的工作,而且每个人的IDE代码都不同,同样的代码换个地方运行就会出错。

Maven拥有约定,知道你的代码在哪里,放到哪里去拥有一个生命周期,例如执行mvn install 就可以自动执行编译、测试、打包等构件过程只需要定义一个pom.xml,然后把源代码放到默认的目录,Maven帮你处理其他的事情拥有依赖管理,仓库管理.


(2)Maven安装与配置

(已经下载好的最新版:点击下载包链接   Maven官网下载包:点击官网链接)

安装配置:



了解maven包中的结构:

              

检测是否安装成功:



初始化配置



Maven的约定:



(3)第一个Maven项目

用maven来做:

基本项目,就是maven的约定

      


第二步:在src/main/java/cn/itcast/maven目录下新建文件Hello.java

<span style="font-family:Microsoft YaHei;font-size:18px;">package cn.itcast.maven;public class Hello {public String sayHello(String name){return "Hello "+name+"!";}}</span>


第三步:在/src/test/java/cn/itcast/maven目录下新建测试文件HelloTest.java
<span style="font-family:Microsoft YaHei;font-size:18px;">package cn.itcast.maven;import org.junit.Test;import static junit.framework.Assert.*;public class HelloTest {@Testpublic void testHello(){Hello hello = new Hello();String results = hello.sayHello("litingwei");assertEquals("Hello litingwei!",results);}}</span>

第四步:在项目Hello根目录建立pom.xml(指明我这是一个maven项目,不管是告诉谁)

<span style="font-family:Microsoft YaHei;font-size:18px;"><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>cn.itcast.maven</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></span>

测试:

注意看D:\javaenv\apache-maven-3.0.5\repository\org\apache\maven\plugins目录的变化


a)打开cmd命令行,必须要进入Hello项目根目录执行 mvn compile命令,查看根目录变化
b)cmd 中继续录入mvn clean命令,然后再次查看根目录变化
c)cmd 中录入 mvn clean compile命令, 查看根目录变化
d)cmd 中录入 mvn clean test命令,查看根目录变化
e)mvn install 安装命令
f)cmd 中录入 mvn clean package命令,查看根目录变化

Run Result:

      


(4)第二个Maven项目

第二个跟第一个差不多,也是先建立maven约定的项目,然后加java文件及pom.xml告知文件。(可以直接复制,然后修改文件)

第七步:在项目HelloFriend根目录建立pom.xml

<span style="font-family:Microsoft YaHei;font-size:18px;"><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>cn.itcast.maven</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><!-- 这是maven的依赖功能,前一个项目是依赖jar包,而这个是依赖前一个项目的打包好的jar包,这样在以后开发过程中,不会因为个人出现个人jar包不同而出现错误的问题。--><groupId>cn.itcast.maven</groupId><artifactId>Hello</artifactId><version>0.0.1-SNAPSHOT</version><scope>compile</scope></dependency></dependencies></project></span>

第八步:在src/main/java/cn/itcast/maven目录下新建文件HelloFriend.java

<span style="font-family:Microsoft YaHei;font-size:18px;">package cn.itcast.maven;import cn.itcast.maven.Hello;public class HelloFriend {public String sayHelloToFriend(String name){Hello hello = new Hello();String str = hello.sayHello(name)+" I am "+this.getMyName();System.out.println(str);return str;}public String getMyName(){return "John";}}</span>

第九步:在/src/test/java/cn/itcast/maven目录下新建测试文件HelloFriendTest.java

<span style="font-family:Microsoft YaHei;font-size:18px;">package cn.itcast.maven;import static junit.framework.Assert.assertEquals;import org.junit.Test;import cn.itcast.maven.Hello;public class HelloFriendTest {@Testpublic void tesHelloFriend(){HelloFriend helloFriend = new HelloFriend();String results = helloFriend.sayHelloToFriend("litingwei");assertEquals("Hello litingwei! I am John",results);}}</span>

a)先执行下mvn clean看看环境是否正确,如果正确的话,说明环境没问题。

b)在HelloFriend目录下执行命令mvn package(这里就发挥了maven的依赖功能了,他依赖了第一个项目的jar包)系统报错说没有找到依赖(没有jar包的时候)

c)需要重新构建Hello第一个项目并安装到数据仓库,在命令行Hello根目录下执行mvn compile test package

run result 成功(一样也会自动生成target文件,里面也有打包好的jar包文件)



(5)Maven相关概念介绍



1.*********坐标

Maven坐标主要组成(在pom.xml文件汇总)
groupId:定义当前Maven项目隶属项目,【包】
artifactId:定义实际项目中的一个模块,【模块】
version:定义当前项目的当前版本,【版本】
packaging:定义该项目的打包方式,默认jar,还可以是war、jar、ear



Maven为什么使用坐标?
Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范
目的:拥有了统一规范,就可以把查找工作交给机器,默认查找jar包
也就是说在其他项目中依赖它时,能找到它。


2.依赖管理


3.仓库管理(用来统一存储所有Maven共享构建的位置就是仓库)

前面我们提到了,仓库的问题,因为maven是一个统一管理项目的一个工具,jar包这些都是归它统一管理的。那么用到jar包的时候,自然要它来寻找了。前面我们搭建环境的时候已经建立了一个本地仓库,所以他的查找方式应该是:

                              本地仓库----->远程仓库(如中国的镜像网或局域网开的服务器)----->中央仓库(maven默认项)

私服:是一种特殊的远程仓库,它是架设在局域网内的仓库
镜像:用来替代中央仓库,速度一般比中央仓库快


4.******maven生命周期管理

何为生命周期?
Maven生命周期就是为了对所有的构建过程进行抽象和统一

包括项目清理,初始化,编译,打包,测试,部署等几乎所有构建步骤


Maven Lifecycle 三大生命周期“相互独立”


clean:清理项目的       pre-clean 、clean、post-clean

{

Clean Lifecycle 生命周期:
pre-clean 执行一些需要在clean之前完成的工作 
clean 移除所有上一次构建生成的文件 
post-clean 执行一些需要在clean之后立刻完成的工作 

mvn clean 中的clean就是上面的clean,在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行,
也就是说 ,mvn clean 等同于 mvn pre-clean clean 
如果我们运行 mvn post-clean ,那么 pre-clean,clean 都会被运行。
这是Maven很重要的一个规则,可以大大简化命令行的输入。 

}


default:构建项目的【重点】

{

pre-site 执行一些需要在生成站点文档之前完成的工作 
site 生成项目的站点文档 
post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备 
site-deploy 将生成的站点文档部署到特定的服务器上 

}


site:生成项目站点的   site、post-site、site-deploy

{

Default生命周期Default生命周期是Maven生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。

            只需要掌握绿色线命令

}

它们是相互独立的,你可以仅仅调用clean来清理工作目录,仅仅调用site来生成站点。

当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。 
mvn test clean能执行吗?显然是可以的,但是逻辑错误


5.插件管理

   Maven的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的,在本地仓库中可以看到这些插件

\apache-maven-3.0.5\repository\org\apache\maven






1 0