什么是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实战视频教程(14集) 课程目录: Maven3_01_maven概览 Maven3_02_maven安装的注意事项 Maven3_03_在eclipse中建立简单的项目 Maven3_04_maven的依赖特性 Ma 资源太大,传百度网盘了,链接在附件中...
此电子书详细介绍了项目自动化构建工具Maven的使用,内容清晰简洁明了,易于阅读、理解! 目录: Maven概念 Maven安装 Maven项目 Maven命令行 pom.xml概览 settings.xml概览 坐标和依赖 聚合与继承 插件_概念与...
OWS服务概览 24 实现一个简单的OWS服务 24 建立 25 创建插件 27 试一试 30 REST服务 34 简介 34 RESTful服务实现 35 基于Maps的Restful服务实现 43 基于反射的Restful服务实现 49 GeoServer中的Wicket开发 55 Web...
一、内容概览 这个JavaWeb“系统管理”项目资源包,是专为对JavaWeb开发有兴趣的学习者设计的。它包含了从基础到高级的完整知识体系,以及实际项目操作的全部流程。具体内容包括: 项目背景与目标:详细介绍了...
内容概览 项目设置和初始化 控制器设计和实现 数据持久化与数据库集成 安全性和身份验证 性能优化和监控 部署和生产环境考虑 现在,是时候让您的Java技能得到充分发挥,并掌握SpringBoot的魔法了!这个项目将带领您...
Datavines 是一站式开源数据可观测性平台,提供元数据管理、数据概览报告、数据质量管理,数据分布查询、数据趋势洞察等核心能力,致力于帮助用户全面地了解和掌管数据,让您做到心中有数。 架构设计 ...
内容概览 项目设置和初始化 控制器设计和实现 数据持久化与数据库集成 安全性和身份验证 性能优化和监控 部署和生产环境考虑 现在,是时候让您的Java技能得到充分发挥,并掌握SpringBoot的魔法了!这个项目将带领您...
引入javassist的Maven依赖使用javassist进行编程javassist官网:官方指南1.读、写字节码
以下是一份关于Spring Boot开发的资源概览,旨在为不同层次的开发者提供学习路径和实用资源。 ### 入门指南 - **官方文档**:Spring Boot的官方文档是学习之旅的起点。它提供了详尽的指南,从安装到构建第一个应用...
Java学籍管理系统源码带本地搭建教程 注意:不带技术支持,有帮助文件,虚拟商品,发货不退,看好再拍。 开发语言 : JAVA ...系统概览:专业数量、班级数量、课程数量、老师数量、开课数量、学生数量
概览 的扩展,实现了请求签名的生成和应答签名的验证。 如果你是使用Apache HttpClient的商户开发者,可以使用它构造HttpClient。得到的HttpClient在执行请求时将自动携带身份认证信息,并检查应答的微信支付签名。 ...
快速概览 入门 下载源代码以将其用作库项目或直接从依赖项中的 Maven Central 使用它。 例如: dependencies { compile 'com.iangclifton.android:floatlabel:1.0.4' } 对于大多数用途,您可以简单地在 XML 布局...
####Compilation FeedCombiner 是标准的 webapp maven 项目(在 Apache Maven 3.2.1、Oracle Java 1.8 和 1.7 上测试)。 解压后只需在与 pom.xml 相同的文件夹中运行: mvn install 成功构建和测试完成后,打包的...
我们创建一个安装了 node 和 maven 的构建从映像 我们收集一份 Jenkins Docker 镜像的副本 我们使用 Selenium Docker 镜像建立一个 Selenium 环境 启用 VNC 访问的 Chrome、Firefox 的“节点”(密码:“秘密”) ...
闲一品交易平台功能概述 ...构建工具: Maven 3.3.9 质量保证: 所有代码经过严格调试和测试,确保稳定运行。 适用人群: 适合计算机科学、通信、人工智能、自动化等相关专业的学生、教师和从业者。 完美适用于
## 一、项目概览 ### 相关技术 #### 前端 - 开发框架:Vue3、Axios、Element Plus - 脚手架:@Vue/cli - 依赖管理: npm - 开发工具:VSCode 、Chrome #### 后端 - 开发框架:Spring、SpringMVC、Mybatis - ...
1.2 概览 7 1.3 核心引擎 9 1.4 Eclipse编辑器 9 1.5 基于Web的设计器 10 1.6 jBPM控制台 11 1.7 文档结构 12 第二章 获得开始 13 2.1 下载 13 2.2 获得开始 13 2.3 社区 14 2.4 资源 14 2.41许可证 14 2.42 源代码 ...
快速概览 Java 微服务库。 QBit 是一个用于构建微服务的React式编程库 - JSON、HTTP、WebSocket 和 REST。 QBit 使用React式编程来构建弹性 REST 和基于 WebSockets 的云友好型 Web 服务。 SOA 为移动和云而发展。 ...
1.2 概览 2 1.3 核心引擎 3 1.4 Eclipse编辑器 4 1.5 基于Web的设计器 5 1.6 jBPM控制台 5 1.7 文档结构 6 第二章 获得开始 7 2.1 下载 7 2.2 获得开始 7 2.3 社区 8 2.4 资源 8 2.41许可证 8 2.42 源代码 9 2.4.3 ...