项目使用在java开发的众多web应用中,maven作为一个项目构建管理工具被广泛的应用到项目中,在项目中应用maven可以减少我们日常开发过程中很重复的工作,例如编译、打包、执行测试用例以及部署这些比较基础而且日常开发中比较重复的工作.
##1 Maven的由来
maven产生的背景是Apache组织在开发Jakarta Turbine 项目的过程,由于该项目由众多的子项目组成,每个子项目分别有其自己的Ant构建脚本文件,每个项目的Ant文件从内容上来看其实区别不大,所以,他们在设想能不能提供一种标准的方式来构建项目,使其能够清晰地定义项目中包含的内容、简单方便地发布应用以及应该提供能够在多个项目中共享Jar包的方式.
基于以上的需求,Apache 组织最终开发了Maven这个工具,用来构建和管理基于java语言的应用项目.
##2 Maven的目标
Maven的主要目的是能够让开发者能够在最短的时间内胜任开发工作,为了实现这个目标,Maven从以下几个方面来解决问题:
- 构建过程简单化;
- 提供统一的构建过程;
- 提供高质量的项目信息;
- 提供最佳实用开发的指导;
对于以上四点的具体描述
//TOD
Maven使用“约定大于配置”的原则来实现自己的目的,这句话的意思是开发者不被要求自己去创建整个项目构建的配置,
Maven提供默认的操作,一旦Maven的项目被创建,Maven将会使用默认的项目结构.
开发者唯一需要做的事情就是将创建的项目文件发在应该放置的目录内容,这个目录结构都是约定好的,通常也没有什么必要去改变这种大家都约定的目录结构,因此并不需要去修改pom.xml文件的配置.
下面列出了Maven默认的项目元素对应的目录,${basedir}表示整个项目的根路径,具体内容如下:
项目元素 | 默认路径 |
---|---|
source code | ${basedir}/src/main/java |
resources | ${basedir}/src/main/resources |
Tests | ${basedir}/src/test |
distributable JAR | ${basedir}/target |
Complied byte code | ${basedir}/target/classes |
##3 Maven的安装
-
官网下载压缩包,地址: https://maven.apache.org/download.cgi;
-
将下载的压缩包解压到指定的目录,例如:
/home/jiangjian/software/
; -
将解压后Maven所在的目录中的bin可执行目录(例如:
/home/jiangjian/software/maven/bin/
)加入到系统环境变量中(Windows系统中设置PATH变量, Linux操作系统配置到系统的PATH环境变量)
##4 Maven的基本使用
maven是通过项目中的pom.xml文件来实施具体的构建和管理, pom.xml文件中的POM表示Project Object Model.POM包含项目信息和项目构建的详细配置信息.
###4.1 项目的创建
在这里我们使用Maven自带的插件去创建新的项目,创建的过程中它提示需要你需要创建什么样类型的程序,以及项目的groupId等信息,自己根据提示依次完成输入即可.
使用命令:
mvn archetype:generate -DgroupId='com.jiangjian.java.basic' -DartifactId='Java基础' -DarchetypeArtifactId=maven-archetype-webapp
执行的Log如下:
jiangjian@jiangjian:~/temp/java$ mvn archetype:generate -DgroupId='com.jiangjian.java.basic' -DartifactId='Java基础' -DarchetypeArtifactId=maven-archetype-webapp
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:2.4:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:2.4:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO]
[INFO] --- maven-archetype-plugin:2.4:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Interactive mode
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-webapp/1.0/maven-archetype-webapp-1.0.jar
Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-webapp/1.0/maven-archetype-webapp-1.0.jar (4 KB at 3.0 KB/sec)
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-webapp/1.0/maven-archetype-webapp-1.0.pom
Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-webapp/1.0/maven-archetype-webapp-1.0.pom (533 B at 1.2 KB/sec)
[INFO] Using property: groupId = com.jiangjian.java.basic
[INFO] Using property: artifactId = Java基础
Define value for property 'version': 1.0-SNAPSHOT: :
[INFO] Using property: package = com.jiangjian.java.basic
Confirm properties configuration:
groupId: com.jiangjian.java.basic
artifactId: Java基础
version: 1.0-SNAPSHOT
package: com.jiangjian.java.basic
Y: : y
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-webapp:1.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.jiangjian.java.basic
[INFO] Parameter: packageName, Value: com.jiangjian.java.basic
[INFO] Parameter: package, Value: com.jiangjian.java.basic
[INFO] Parameter: artifactId, Value: Java基础
[INFO] Parameter: basedir, Value: /home/jiangjian/temp/java
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: /home/jiangjian/temp/java/Java基础
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 43.673 s
[INFO] Finished at: 2016-08-29T10:25:03+08:00
[INFO] Final Memory: 14M/215M
[INFO] ------------------------------------------------------------------------
创建后的项目目录结构是:
jiangjian@jiangjian:~/temp/java$ ls
Java基础
jiangjian@jiangjian:~/temp/java$ tree
.
└── Java基础
├── pom.xml
└── src
└── main
├── resources
└── webapp
├── index.jsp
└── WEB-INF
└── web.xml
6 directories, 3 files
可以看一下maven默认创建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>
<groupId>com.jiangjian.java.basic</groupId>
<artifactId>Java基础</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>Java基础 Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>Java基础</finalName>
</build>
</project>