Maven中文意思是"行家"、"专家",它是一种跨平台的项目管理工具。html
Maven可以实现基于Java平台的项目构建、依赖管理和项目信息管理。java
高度自动化,跨平台,可重用组件,符合标准化的规范spring
自动下载,统一依赖管理,方便项目升级和修改apache
项目名称描述、开发人员信息、开发者信息等。框架
Maven官方下载地址:http://maven.apache.org/download.cgieclipse
Eclipse插件更新地址:http://www.eclipse.org/m2e/maven
安装过程见官方文档说明:http://maven.apache.org/install.html、http://maven.apache.org/configure.htmlide
Ant和Maven都是apache下的工程,在早些时候,Ant很是流行,像是spring框架和hibernate框架都使用了该项目管理工具进行项目的构建,可是如今到他们的官网上查看项目结构,能够看出,他们都已经使用Maven管理最新的项目了,为了实现过渡,中间曾经出现过Maven和Ant共存的状况,这样却是方便了用户的选择,可是如今这种状况已经没有了,或者说极少出现了,如今各大公司都直接使用Maven管理项目而抛弃了Ant。工具
* MAVEN_HOME/conf/settings.xml,这是全局的配置文件post
* ~/.m2/settings.xml配,这是单个用户的配置文件
项目文件夹
|------src
|------main
|------java //存放项目的java文件
|------resources //存放项目资源文件,如spring、hibernate的配置文件
|------test
|------java //存放全部测试的java文件
|------resources //存放测试须要的资源文件,如spring、hibernate的配置文件
|------target //存放项目生成的目标代码、资源文件等
|------pom.xml //项目核心配置文件
详细配制方法见英文文档:http://maven.apache.org/pom.html
POM是"Project Object Model"的英文缩写,
1 <project xmlns="http://maven.apache.org/POM/4.0.0" 2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 4 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 5 <modelVersion>4.0.0</modelVersion> 6 7 <!-- The Basics --> 8 <groupId>...</groupId> 9 <artifactId>...</artifactId> 10 <version>...</version> 11 <packaging>...</packaging> 12 <dependencies>...</dependencies> 13 <parent>...</parent> 14 <dependencyManagement>...</dependencyManagement> 15 <modules>...</modules> 16 <properties>...</properties> 17 18 <!-- Build Settings --> 19 <build>...</build> 20 <reporting>...</reporting> 21 22 <!-- More Project Information --> 23 <name>...</name> 24 <description>...</description> 25 <url>...</url> 26 <inceptionYear>...</inceptionYear> 27 <licenses>...</licenses> 28 <organization>...</organization> 29 <developers>...</developers> 30 <contributors>...</contributors> 31 32 <!-- Environment Settings --> 33 <issueManagement>...</issueManagement> 34 <ciManagement>...</ciManagement> 35 <mailingLists>...</mailingLists> 36 <scm>...</scm> 37 <prerequisites>...</prerequisites> 38 <repositories>...</repositories> 39 <pluginRepositories>...</pluginRepositories> 40 <distributionManagement>...</distributionManagement> 41 <profiles>...</profiles> 42 </project>
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"> 2 <modelVersion>4.0.0</modelVersion> 3 <groupId>com.kdyzm.hello</groupId> 4 <artifactId>Hello</artifactId> 5 <version>0.0.1-SNAPSHOT</version> 6 <name>Hello</name> 7 8 <dependencies> 9 <dependency> 10 <groupId>junit</groupId> 11 <artifactId>junit</artifactId> 12 <version>4.9</version> 13 <scope>test</scope> 14 </dependency> 15 16 </dependencies> 17 </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命令的话须要将项目生成的文件打包成什么样的类型,支持的类型以下:
pom, jar, maven-plugin, ejb, war, ear, rar, par.
dependencies:该标签的做用就是声明依赖的项目或者jar包,每个依赖都是用dependendy标签来单独声明,声明的内容除了使用groupId、artifactId和version定位项目以外,还要有一个scope标签用来指定做用范围,其做用和java中的注解有些类似;理解这个须要先搞定maven项目的构建过程:
scope的全部支持类型:
compile:编译时有效,做用在上图中的编译阶段
test:测试时有效,做用在上图中的测试阶段
runtime:运行时有效,做用在测试阶段和之后的阶段
provided:顾名思义,当该项目运行的容器中提供了该jar包的时候(测试运行的时候没有该环境),须要将该依赖声明为provided,这样jar包就不会拷贝到运行的容器中了,这样可以防止jar包冲突问题的发生。
system:其做用和provided相似,可是须要除去一点,该jar包在本地maven库中不存在(有疑问)。
什么是生命周期?从建立到死亡的过程就是生命周期,一个比较完整的声明周期以下:
maven可以实现高度的自动化,当咱们执行mvn compile命令的时候,其生命周期以前的命令都会依次执行一遍;同理,当咱们执行mvn test命令的时候,包括mvn compile命令在内,其以前的命令都会依次执行一遍。
Hello
|------src
|------main
|------java
|------com/kdyzm/main/Hello.java
|------resources
|------test
|------java
|------com/kdyzm/main/test/HelloTest.java
|------resources
|------target
|------pom.xml
1 package com.kdyzm.main; 2 public class Hello 3 { 4 public int calculate(int input){ 5 System.out.println("获得输入参数是:"+input); 6 return input*input; 7 } 8 }
1 package com.kdyzm.main.test; 2 3 import org.junit.Test; 4 import com.kdyzm.main.Hello; 5 public class HelloTest 6 { 7 @Test 8 public void testHello(){ 9 Hello hello=new Hello(); 10 int result=hello.calculate(2); 11 System.out.println("计算获得的结果是:"+result); 12 } 13 }
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"> 2 <modelVersion>4.0.0</modelVersion> 3 <groupId>com.kdyzm.hello</groupId> 4 <artifactId>Hello</artifactId> 5 <version>0.0.1-SNAPSHOT</version> 6 <name>Hello</name> 7 8 <dependencies> 9 <dependency> 10 <groupId>junit</groupId> 11 <artifactId>junit</artifactId> 12 <version>4.9</version> 13 <scope>test</scope> 14 </dependency> 15 16 </dependencies> 17 </project>
使用maven命令进行管理:
HelloFriend
|------src
|------main
|------java
|------com/kdyzm/main/HelloFriend.java
|------resources
|------test
|------java
|------com/kdyzm/main/test/HelloFriendTest.java
|------resources
|------target
|------pom.xml
1 package com.kdyzm.main; 2 import com.kdyzm.main.Hello; 3 public class HelloFriend{ 4 public String sayHello(int input){ 5 System.out.println("HelloFriend类sayHello方法接收到的参数是:"+input); 6 Hello hello = new Hello(); 7 int result=hello.calculate(input); 8 return result+""; 9 } 10 }
1 package com.kdyzm.main.test; 2 import com.kdyzm.main.HelloFriend; 3 import org.junit.Test; 4 public class HelloFriendTest 5 { 6 @Test 7 public void testSayHello(){ 8 HelloFriend helloFriend=new HelloFriend(); 9 String result=helloFriend.sayHello(2); 10 System.out.println("testSayHello的执行结果是:"+result); 11 } 12 }
<!--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"> 2 <modelVersion>4.0.0</modelVersion> 3 <groupId>com.kdyzm.hello</groupId> 4 <artifactId>HelloFriend</artifactId> 5 <version>0.0.1-SNAPSHOT</version> 6 <name>HelloFriend</name> 7 8 <dependencies> 9 <dependency> 10 <groupId>junit</groupId> 11 <artifactId>junit</artifactId> 12 <version>4.9</version> 13 <scope>test</scope> 14 </dependency> 15 16 <dependency> 17 <groupId>com.kdyzm.hello</groupId> 18 <artifactId>Hello</artifactId> 19 <version>0.0.1-SNAPSHOT</version> 20 <scope>compile</scope> 21 </dependency> 22 23 </dependencies> 24 </project>
当执行完成mvn install命令的时候,打包成jar的项目和相关配置文件就会保存到maven仓库中以便于向其余项目提供依赖,保存的目录是:~/.m2/repository/$groupId/$artifactId
例如以上两个项目执行完成mvn install命令以后,若是没有错误,那么在我电脑对应的目录上就会出现一下文件和目录: