# Maven 使用手册
## 开发环境
1. ```JDK 1.8```
2. ```Maven 3.2.5```

## 下载及安装
1. 下载 [jdk1.8](http://www.oracle.com/technetwork/java/javase/downloads/index.html) 并安装
2. 下载 [Maven 3.2.5](http://maven.apache.org/download.html) 并解压

## 配置环境变量
### 配置jdk环境变量
1. 将字符串“`;C:\Program Files\Java\jdk1.8\bin`”添加到系统变量“Path”的末尾
2. 用户变量新建一个classpath变量并赋值"`.`"
3. 在cmd控制台中通过`java -version`来测试java环境变量是否配置正确

### 配置maven环境变量
1. 添加 M2_HOME、M2、MAVEN_OPTS 到环境变量中,使用系统属性设置环境变量。
   * `M2_HOME=C:\Program Files\Apache Software Foundation\apache-maven-3.2.5`
   * `M2=%M2_HOME%\bin`
   * `MAVEN_OPTS=-Xms256m -Xmx512m`
2. 添加 M2 变量到系统“Path”变量中,添加字符串 “`;%M2%`” 到系统“Path”变量末尾
3. 在cmd控制台中通过`mvn --version`来测试mvn环境变量是否配置正确

## 常用命令
> | 命令 | 解释 |
> | -------- | -------- |
> | `mvn archetype:create` | 创建 Maven 项目 |
> | `mvn clean` | 清除目标目录中的生成结果 |
> | `mvn compile` | 编译源代码 |
> | `mvn test-compile` | 编译测试代码 |
> | `mvn test` | 运行应用程序中的单元测试 |
> | `mvn package` | 依据项目生成 jar,war 文件 |
> | `mvn install` | 在本地 Repository 中安装 jar,war |
> | `mvn eclipse:eclipse` |  生成 Eclipse 项目文件 |
> | `mvn site` | 生成项目相关信息的网站 |

## 创建maven项目
### 创建Maven的普通java项目 
   ``` mvn archetype:generate -DgroupId=com.hand.app -DartifactId=项目名 -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false ```

### 创建Maven的Web项目 
  1. 进入命令行输入以下内容创建webapp项目:
    * ``` mvn archetype:generate -DgroupId=com.hand.app -DartifactId=项目名 -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false ```
    * (补充:在该命令行后面加上`-X`可查看创建web项目的进度)
  2. 进入工程目录(cd 项目名),使用以下命令将项目生产为eclipse项目`mvn eclipse:eclipse`

  > | 命令 | 解释 |
  > | -------- | -------- |
  > | `mvn archetype:generate` | 固定格式 |
  > | `-DgroupId` | 组织标识(包名) |
  > | `-DartifactId` | 项目名称 |
  > | `-DarchetypeArtifactId` | 指定ArchetypeId,maven-archetype-quickstart,创建一个Java Project;maven-archetype-webapp,创建一个Web Project |
  > | `-DinteractiveMode` | 是否使用交互模式 |
    
## mvn编译执行项目
### 普通项目
* main目录的class:在项目根目录下运行命令`mvn clean compile`进行项目编译
* test目录下class:在项目根目录下运行`mvn clean test`进行测试
* 编译完成后在项目根目录下生成了`target`文件夹,里面存放了`class`文件
* 使用`mvn exec:java -Dexec.mainClass="com.hand.app.App"`运行App这个mainClass

### web项目
* `mvn tomcat:run` 启动tomcat,根据给定的端口号,在浏览器上输入`localhost:端口号/项目名/index.jsp`运行项目

## 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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>`  //当前POM模型的版本<br/>
  `<groupId>SpringMVC</groupId>`  //项目或者组织的唯一标志<br/>
  `<artifactId>JspExam10105</artifactId>` //项目的通用名称<br/>
  `<packaging>war</packaging>` //打包机制<br/>
  `<version>0.0.1-SNAPSHOT</version>`  //项目版本<br/>
  `<name>JspExam10105 Maven Webapp</name>`  //用户描述项目的名称<br/>
  `<url>http://maven.apache.org</url>`  //只是写明开发团队的网站,无关紧要<br/>
  `<dependencies>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>`  //指定当前依赖范围<br/>
      `</dependency>  
  </dependencies>`  //依赖关系<br/>
  `<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>`  //项目字符为UTF-8<br/>
  `</properties>`  //为pom定义一些常量,在pom中的其它地方可以直接引用<br/>
  `<build>
    <finalName>SpringMVC</finalName>`  //指定去掉后缀的工程名字<br/>
    `<pluginManagement>
		<plugins>
			<plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat8-maven-plugin</artifactId>
				<version>2.3-SNAPSHOT</version>
			</plugin>`  //配置maven插件<br/>
		`</plugins>
    </pluginManagement>`  //用于管理plugin<br/>
	`<resources>  
		<resource>  
			<directory>src/main/java</directory>`  //用于管理plugin<br/>
			`<includes>  
				<include>**/*.properties</include>`  //指定包含文件的patterns,符合样式并且在directory目录下的文件将会包含进project的资源文件<br/>
				`<include>**/*.xml</include>  
			</includes>  
			<filtering>false</filtering>`  //指定是否将filter文件(即上面说的filters里定义的```*.property```文件)的变量值在这个resource文件有效<br/>
		`</resource>  
		<resource>  
			<directory>src/main/resources</directory>  
			<includes>  
				<include>**/*.properties</include>  
				<include>**/*.xml</include>  
			</includes>  
			<filtering>false</filtering>  
		</resource> 
	</resources>`  //描述工程中资源的位置<br/>
   `</build>
 </project>`