什么是Maven
- Maven这个单词意为知识的积累,最早在Jakata Turbine项目中它开始被用来试图简化构建过程,Maven是一种很方便的发布项目信息的方式,以及一种在多个项目中共享JAR的方式。
- Maven是项目管理工具,它为项目构建、测试、打包、部署定义了一个标准的生命周期。。
- Maven基于一个 通用的软件对象模型(Project Object Model),也就是POM。
- Maven项目属于Apache软件基金会的一个顶级项目http://maven.apache.org/。Apache的很多项目都是基于Maven来管理的。同时,越来越多的项目和产品使用Maven作为他们项目管理的基础。它变得易于在项目和构建系统建立关系,并且在这个关系之上导航和做报告。
- Maven的规范和中央仓库为项目定义了一种全新的命名系统。使用Maven可以很容易的加入其他的依赖项,并发布你自己的组件。
Maven体系结构
图片来源:http://zc985552943.iteye.com/blog/2090260
Maven安装
下载Maven
- 最新版本3.2.2,http://maven.apache.org/download.cgi
- 解压
- sudo vim /etc/profile
-
在最后添加系统变量M2_HOME
export M2_HOME=/home/tom/devsoftware/apache-maven-3.2.2 export PATH=$PATH:$M2_HOME/bin
- source /etc/profile
- 验证安装成功
在用户根目录下输入mvn v,察看Maven是否安装成功
Apache Maven 3.2.2 (45f7c06d68e745d05611f7fd14efb6594181933e; 2014-06-17T21:51:42+08:00)
Maven home: /home/tom/devsoftware/apache-maven-3.2.2
Java version: 1.7.0_55, vendor: Oracle Corporation
Java home: /software/devsoftware/jdk1.7.0_55/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.2.0-39-generic", arch: "amd64", family: "unix"
Maven版本的Hello World
- 在~/learnmaven/maven-ch01中新建空的pom.xml,运行mvn compile,会报错,提示pom.xml文件必需的内容缺失
-
在pom.xml添加必需的xml内容,
<?xml version="1.0" encoding="UTF-8"?> <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"> <!--mandatory element in the project--> <modelVersion>4.0.0</modelVersion> <!--mandatory 3 elements in the project,这是确定唯一Maven模块的三元组--> <groupId>LearnMaven</groupId> <artifactId>LearnMaven</artifactId> <version>1.0</version> </project>
project的四个子元素,modelVersion,groupId,artifactId和version是四个必需的元素,运行mvn compile之后,得到的结果是[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building LearnMaven 1.0 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ LearnMaven --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory /home/tom/development/learnmaven/maven-ch01/src/main/resources [INFO] [INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ LearnMaven --- [INFO] No sources to compile [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.707 s [INFO] Finished at: 2014-08-02T00:22:44+08:00 [INFO] Final Memory: 6M/106M [INFO] ------------------------------------------------------------------------
- 在~/learnmaven/maven-ch01目录下创建Maven的标准Maven模块的目录结构
mkdir -p src/main/java
mkdir -p src/main/resources
mkdir -p src/test/java
4. 在 src/main/java目录执行命令mkdir -p com/tom
在 src/test/java目录执行命令mkdir -p com/tom
5. 在com/tom目录下创建一个Java类
package com.tom; public class HelloMaven { public String hi(String name){ return "Hi " + name + ",welcome to the Maven world"; } }
6.回到~/learnmaven/maven-ch01目录执行命令mvn compile,得到如下输出,说明HelloMaven已经编译成功,编译的目标路径是target/classes
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building LearnMaven 1.0 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ LearnMaven --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ LearnMaven --- [WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent! [INFO] Compiling 1 source file to /home/tom/development/learnmaven/maven-ch01/target/classes [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.928 s [INFO] Finished at: 2014-08-02T00:40:23+08:00 [INFO] Final Memory: 9M/107M [INFO] -----------------------------------------------------------------------
察看target/classes目录,可以发现com/tom/HelloMaven.classes
7. 在src/test/java/com/tom编写HelloMaven的单元测试类
package com.tom; import org.junit.Assert; import org.junit.Test; public class HelloMavenTest { @Test public void testHi() { String name = "tom"; HelloMaven hm = new HelloMaven(); Assert.assertEquals("Hi tom,welcome to the Maven world",hm.hi(name)); } }
8.为pom.xml添加junit4依赖,pom.xml为
<?xml version="1.0" encoding="UTF-8"?> <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"> <!--mandatory element in the project--> <modelVersion>4.0.0</modelVersion> <!--mandatory 3 elements in the project--> <groupId>LearnMaven</groupId> <artifactId>LearnMaven-ch01</artifactId> <version>1.0</version> <dependencies> <!--JUnit 4.11--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> </dependencies> </project>
9.在回到~/learnmaven/maven-ch01目录执行命令mvn compile test,看到测试代码编译并且执行,
------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.tom.HelloMavenTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.094 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 9.853 s [INFO] Finished at: 2014-08-02T01:25:38+08:00 [INFO] Final Memory: 17M/170M [INFO] ------------------------------------------------------------------------
结果显示:测试用例成功执行,并且在target下创建了surefire-reports目录,在这个目录中创建了关于测试结果的信息文件
Maven模块依赖
1.在Maven Hello World的基础上,重新创建一个Maven模块,LearnMavenCh02,创建Maven的标准目录结构src/main/java和src/test/java等
2.在src/main/java/com/tom目录下,新建一个Java类,这个类依赖于Maven HelloWorld的HelloMaven,代码:
package com.tom; public class HelloMavenCh02 { public String hi(String name){ return new HelloMaven().hi(name); } }
因为LearnMaven02模块依赖于LearnMaven01模块,因此,我们需要将对LearnMaven01模块的依赖加入到LearnMaven02模块中,pom文件的内容如下
<?xml version="1.0" encoding="UTF-8"?> <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"> <!--mandatory element in the project--> <modelVersion>4.0.0</modelVersion> <!--mandatory 3 elements in the project--> <groupId>LearnMaven</groupId> <artifactId>LearnMaven-ch02</artifactId> <version>1.0</version> <dependencies> <!--JUnit 4.11--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> <dependency> <groupId>LearnMaven</groupId> <artifactId>LearnMaven-ch01</artifactId> <version>1.0</version> </dependency> </dependencies> </project
3.执行命令mvn compile,报错,报错信息是
[ERROR] Failed to execute goal on project LearnMaven-ch02: Could not resolve dependencies for project LearnMaven:LearnMaven-ch02:jar:1.0: Failure to find LearnMaven:LearnMaven-ch01:jar:1.0 in http://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced -> [Help 1]
意思是在中央仓库找不到LearnMaven-ch01,原因是我们还没有将LearnMaven-ch01放到本地仓库中
4.对LearnMaven01模块执行mvn install命令,将LearnMaven01模块添加到本地仓库.在LearnMaven01模块的~/development/learnmaven/maven-ch01目录执行mvn install,可以看到LearnMaven-ch01模块已经添加到本地仓库中,本地仓库路径~/.m2/repository/LearnMaven/LearnMaven-ch01/1.0/LearnMaven-ch01-1.0.jar
5.回到~/development/learnmaven/maven-ch02目录执行mvn compile发现LearnMaven-ch02模块编译成功
仓库
1.在pom.xml中定义的dependency,当查找这些依赖的jar包时候,首先从本地仓库中,然后再到全球的中央Maven库中下载,比如http://mvnrepository.com/中查找下载
2. 本地仓库~/.m2/repository
执行mvn install是将Maven模块打包后发布到本地仓库中,本地仓库的路径是在M2_HOME/conf/settings.xml中指定,
<!-- localRepository | The path to the local repository maven will use to store artifacts. | | Default: ${user.home}/.m2/repository <localRepository>/path/to/local/repo</localRepository> -->
3. 中央仓库,默认的配置是在$M2_HOME/lib/maven-settings-builder-3.2.2.jar包的pom-4.0.0.xml中,
<repositories> <repository> <id>central</id> <name>Central Repository</name> <url>http://repo.maven.apache.org/maven2</url> <layout>default</layout> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>central</id> <name>Central Repository</name> <url>http://repo.maven.apache.org/maven2</url> <layout>default</layout> <snapshots> <enabled>false</enabled> </snapshots> <releases> <updatePolicy>never</updatePolicy> </releases> </pluginRepository> </pluginRepositories>
相关推荐
Maven3_01_maven概览 Maven3_02_maven安装的注意事项 Maven3_03_在eclipse中建立简单的项目 Maven3_04_maven的依赖特性 Maven3_05_maven的聚合和继承 Maven3_06_复习maven的基本内容 Maven3_07_nexus的介绍和安装 ...
#### Maven3.5至3.6.3版本概览 Maven 3.x系列是当前Maven的主要版本分支,其中3.5到3.6.3这几个版本主要集中在性能优化、错误修复及新功能添加等方面。这些版本之间的差异虽然不大,但每个版本都有其独特的改进点。 ...
#### 一、Maven概览 Maven是一个项目管理和综合工具,主要用于Java项目。它的设计理念是“约定优于配置”,即通过预设的规则和标准来减少配置工作量,使开发者能够更加专注于业务逻辑而不是构建过程。 **1.1 Maven...
**Maven快速培训PPT概览** Maven是一个在Java开发领域广泛应用的项目管理和构建工具。它的核心功能包括项目对象模型(Project Object Model)、依赖管理、项目生命周期和插件等,旨在简化项目的构建过程,提高开发...
### Maven权威指南中文版知识点概览 #### 一、Maven概述 **1.1 Maven是什么?** Maven被广泛认为是一种项目管理和构建自动化工具,主要用于Java项目的开发。Maven的核心价值在于它不仅是一个简单的构建工具,如Ant...
### Maven权威指南中文版知识点概览 #### 一、引言与Maven概念 - **Maven概述**:Maven是一种项目管理和理解工具,旨在通过一套标准流程来简化项目的构建过程。 - **约定优于配置(Convention Over Configuration)...
### Maven 完整参考知识点概览 #### 一、引言与 Maven 概念 **1.1 Maven 是什么?** Maven 是一个项目管理和理解工具。它包含了一个项目对象模型(POM),一组标准集合,一个项目生命周期,一个依赖管理系统以及其他...
### Maven Definitive Guide知识点概览 #### 一、引言 《Maven Definitive Guide》是一本全面介绍Apache Maven构建工具的书籍,由Tim O'Brien、John Casey、Brian Fox、Bruce Snyder、Jason Van Zyl及Eric Redmond...
### Maven - Maven 教程概览 #### 一、Apache Maven —— 概述 **1.1 什么是 Maven** Apache Maven 是一个基于项目对象模型(Project Object Model, POM)的软件项目管理和理解工具。它能够从一个中央信息源管理...
### Maven 2 概览 Maven 2的核心功能在于它的项目对象模型(Project Object Model,简称POM)。POM是一个XML文件,包含了项目的基本信息、依赖关系、构建过程和其他配置细节。Maven使用POM来理解项目的构建过程,并...
**Maven 2 概览** Maven 2 的设计理念是理解项目的一般构建方式,并通过内置的项目知识简化构建过程。它内含的依赖管理系统能够处理项目之间的依赖关系,确保正确版本的库被用于构建。此外,Maven 2 提供了一个标准...
### Maven Definitive Guide知识点概览 #### 一、Maven简介与定义 - **Maven是什么?**:Maven不仅是一种构建工具,更是一种项目管理工具。它超越了传统构建工具(如Ant)仅专注于预处理、编译、打包、测试和分发...