一、Maven介绍
1.项目开发遇到的问题
(1)同样的代码,在不同机器上运行的结果不一致
(2)在机器上可以正常打包,但是配置管理员打不出来
(3)项目组加入新成员,我需要告诉他编译环境如何让配置,但是我记不清数
(4)项目以来一些jar包,不知道放在哪里
(5)我开发的第二个项目,还是需要上面的jar包,再把复制到我当前的项目得到svn库里,第三次需要用,还要在复制吗?
(6)我写了一个数据库相关的通用类,并且推荐给了其他项目组,现在已经有五个项目组在使用它了,今天我发现了一个bug,并修正了它,我会把jar包通过邮件发给其他项目组
(7)项目进入测试阶段,每天都要向测试服务器部署一版。每次都手动部署
2.什么是maven
(1)是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。
(2)Maven是跨平台的项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。
3.maven主要功能
(1)项目构建(打包,部署)
(2)依赖管理(做好配置,自定义下载依赖)
4.什么是构建
- 构建过程
5.项目构建方式
- Eclipse
手工操作较多,项目的构建过程都是独立的,很难一步完
成。比如:编译、测试、部署等。开发时每个人的IDE配置都不同,很容易出现本地代码换个地方编译就出错
- Ant
Ant只是一个项目构建工具,它没有集成依赖管理。
Ant在进行项目构建时,它没有对项目目录结构进行约定,需要手动指定源文件、类文件等目录地址。同时它执行task时,需要显示指定依赖的task,这样会造成大量的代码重复。
- Maven
Maven不仅是一个项目构建工具,更是一个项目管理工
具。它在项目构建工程中,比ant更全面,更灵活。
Maven在进行项目构建时,它对项目目录结构拥有约定,知道你的源代码在哪里,类文件应该放到哪里去。
它拥有生命周期的概念,maven的生命周期是有顺序的,在执行后面的生命周期的任务时,不需要显示的配置前面任务的生命周期。例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程
6.maven模型
二、maven安装配置
1.下载maven
2.maven安装
第一步:安装jdk,要求1.6或以上版本。
第二步:把maven解压缩,解压目录最好不要有中文。
第三步:配置环境变量MAVEN_HOME
第四步:配置环境变量PATH,将%MAVEN_HOME%\bin加入Path中,在Windows中一定要注意要用分号;与其他值隔开。
第五步:验证是否安装成功,打开cmd窗口,输入mvn –v
3.maven的配置
Maven有两个settings.xml配置文件,一个是全局配置文件,一个是用户配置文件。
- 全局配置
%MAVEN_HOME%/conf/settings.xml 是maven全局
的配置文件。
该配置文件中配置了本地仓库(依赖)的路径,默认就是:**/.m2/repository**。其中表示当前用户路径C:\Users[UserName]。
localRepository:用户仓库,用于检索依赖包路径
- 用户配置
~/.m2/settings.xml是用户的配置文件
注意:一般本地仓库的地址不使用默认配置,通常情况下需要在用户配置中,配置新的仓库地址。
配置步骤如下:
第一步:创建一个本地仓库目录,比如E:// repository/maven。
/USERS/.m2/repository
第二步:复制maven的全局配置文件(.settings)到~/.m2目录下,即创建用户配置文件
第三步:修改maven的用户配置文件。
注意:用户级别的仓库在全局配置中一旦设置,全局配置将不再生效,转用用户所设置的仓库,否则使用全局配置文件中的默认路径仓库(全局:maven/conf/settings.xml 用户:用户:~/.m2/settings.xml )
三.创建maven工程
1.maven的工程结构
Project
|-src
| |-main
| | |-java —— 存放项目的.java文件
| | |-resources —— 存放项目资源文件,如spring, hibernate配置文件
| | |-webapp ———存放jsp,html,web.xml等网页文件 WebContent
| |-test 测试代码
| |-java ——存放所有测试.java文件,如JUnit测试类
| |-resources —— 测试资源文件
|-target —— 目标文件输出位置 如.class、.jar、.war文件
|-pom.xml ——maven项目核心配置文件
2.maven工程的创建
第一步:根据maven的目录结构创建HelloMaven工程
第二步:创建HelloWorld.java
package com.qf.maven;
public class HelloWorld {
public String sayHello(String name){
return "Hello World :" + name + "!";
}
}
第三步:创建TestHelloWorld.java
package com.qf.maven;
import org.junit.Test;
import static junit.framework.Assert.*;
public class TestHelloWorld{
@Test
public void testSayHello(){
HelloWorld hw = new HelloWorld();
String result = hw.sayHello("zhangsan");
assertEquals("hello zhangsan",result);
}
}
第四步:配置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">
<!-- 版本:4.0.0 -->
<modelVersion>4.0.0</modelVersion>
<!-- 组织名称:暂时使用 组织名称+项目名称 作为组织名称 -->
<!-- 组织名称:实际名称 按照访问路径规范设置,通常以功能作为名称:eg: junit spring -->
<groupId>com.qf.maven</groupId>
<!-- 项目名称 -->
<artifactId>HelloWorld</artifactId>
<!-- 当前项目版本号:同一个项目开发过程中可以发布多个版本,此处标示0.0.1版 -->
<!-- 当前项目版本号:每个工程发布后可以发布多个版本,依赖时调取不同的版本,使用不同的版本号 -->
<version>0.0.1</version>
<!-- 名称:可省略 -->
<name>Hello</name>
<!-- 依赖关系 -->
<dependencies>
<!-- 依赖设置 -->
<dependency>
<!-- 依赖组织名称 -->
<groupId>junit</groupId>
<!-- 依赖项目名称 -->
<artifactId>junit</artifactId>
<!-- 依赖版本名称 -->
<version>4.9</version>
<!-- 依赖范围:test包下依赖该设置 -->
<scope>test</scope>
</dependency>
</dependencies>
</project>
3.maven的命令(重要的五个)
- Mvn compile
执行 mvn compile命令,完成编译操作
执行完毕后,会生成target目录,该目录中存放了编译后的字节码文件。
- Mvn clean
执行 mvn clean命令 执行完毕后,会将target目录删除。
- Mvn test
执行 mvn test命令,完成单元测试操作
执行完毕后,会在target目录中生成三个文件夹:surefire、surefire-reports(测试报告)、test-classes(测试的字节码文件)
- Mvn package
执行 mvn package命令,完成打包操作
执行完毕后,会在target目录中生成一个文件,该文件可能是jar、war
- Mvn install
执行 mvn install命令,完成将打好的jar包安装到本地仓库
的操作 执行完毕后,会在本地仓库中出现安装后的jar包,方便其他工程引用