Maven是一个项目管理工具,它包含了一个项目对象模型,一组标准集合,一个项目周期,一个依赖管理系统和用来运行定义在生命周期阶段中插件目标的逻辑;
Convention Over Configuration 默认约定
默认源码:${basedir}/src/main/java
资源文件:${basedir}/src/main/resources
测试代码:${basedir}/src/main/test
JAR文件存放在:${basedir}/target/classes
Maven主要靠插件来管理生命周期,Life Circle
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.sonatype.mavenbook</groupId>
<artifactId>my-project</artifactId>
<version>1.0</version>
</project>
Maven:http://maven.apache.org
环境变量
export M2_HOME=/usr/local/maven
export PATH=$M2_HOME/bin:$PATH
Maven Help插件四个目标
help:active-profiles
help:effective-pom
help:effective-settings
help:describe
mvn archetype:create -DgroupId=org.sonatype.mavenbook.ch03 -DartifactId=simple -DpackageName=org.sonatype.mavenbook
groupId,artifactId,packaging,version是Maven中唯一标识一个项目;
Maven的插件和目标(Plugins and Goals)
一个Maven插件是一个单个或者多个目标的集合;一个目标是一个明确的任务,它可以作为单独的目标运行,或者作为一个大得构建的一部分和其它目标一起运行;
LIfecycle:生命周期是包含在一个项目构建中的一系列有序的阶段;
当Maven经过以package为结尾的默认生命周期的时候,下面的目标按顺序被执行:
resources:resources
compiler:compile
resources:testResources
compiler:testCompile
surefire:test
jar:jar
运行package阶段能很好的跟踪一个特定的构建中包含的所有目标,它也允许每个项目使用Maven来遵循一组定义明确的标准;
Archetype插件通过名字为pom.xml的文件创建一个项目,这就是项目对象模型(POM),一个项目的声明性描述;
Maven坐标定义了一组标识,可以用来唯一标识一个项目,一个依赖或者Maven POM里的一个插件:groupId、artifactId,version和packaging 组成项目坐标
初始Maven并不包含太多插件,而在需要的时候再从远程仓库获取,Maven的远程仓库 http://repo1.maven.org/maven2
Maven仓库的标准时按照下面的目录格式来存储构建,相对于仓库的根目录:
/<groupId>/<artifactId>/<version>/<artifactId>-<version>.<packaging>
本地仓库:
Windows:c:\username\.m2\repository
Linux:~/.m2/repository
Maven依赖管理 Dependency Management
一个复杂的项目将包含很多依赖,也有可能包含依赖于其它构件的依赖,Maven支持传递性依赖由于Maven同时下载构建和POM文件,当Maven通过一组Maven坐标来处理依赖构件的时候,它也会获取POM,通过依赖的POM来寻找传递性依赖,传递性依赖就会背添加到当前项目的依赖列表中;
浏览项目依赖
mvn dependency:resolve
mvn dependency:tree 查看项目依赖树
一个单元测试需要访问针对测试的一组资源,通常需要在测试classpath中存储一些包含期望结果的文件以及包含模拟输入的文件;
test阶段是Maven生命周期中常规的一部分,当你运行mvn package或者mvn install的时候你也运行了测试,如果你想要运行到test阶段为止的所有生命周期阶段,运行mvn test;
Test阶段,test目标执行项目中所有能在src/test/java找到的并且文件名与**/Test*.java,**/*Test.java和**/*TestCase.java匹配的所有单元测试;
忽略单元测试失败:mvn test -Dmaven.test.failure.ignore=true
跳过单元测试:mvn install -Dmaven.test.skip=true
项目对象模型
POM:Project Object Model,Maven项目,依赖,构建配置以及构件,所有这些都是要建模和表述的对象,这些对象通过名为POM的XML文件描述;
POM包含了四类描述和配置
(1)项目总体信息 基本信息
(2)构建设置 自定义Maven构建的默认行为
(3)构建环境 包含了一些能在不同使用环境中激活的profile
(4)POM关系
超级POM,所有项目多扩展自超级POM,超级POM永远是最基础的父POM
Maven开始于超级POM,然后使用一个或多个父POM覆盖默认配置,最后使用当前项目的POM来覆盖之前生成的配置结果。查看当前项目依赖的命令:mvn help:effective-pom
POM语法
POM永远都是基础目录下的一个名为pom.xml的文件
项目版本:一个Maven项目发布版本号用version编码,用来分组和排序发布,Maven中的版本包含以下部分:主版本、次版本、增量版本和限定版本号,对应格式:<major version>.<minor version>.<incremental version>-<qualifier>;
SNAPSHOT版本
Maven版本可以包含一个字符串字面量来表示项目正处于活动的开发状态,如果一个版本包含字符串“SNAPSHOT”,Maven就会再安装或发布这个组件的时候将该符号展开为一个日期和时间值,转换为UTC,换句话说,当你发布一个SNAPSHOT,你没有发布一个软件模块,只是发布了一个特定时间的快照版本;
LATEST和RELEASE版本,当你依赖于一个插件或者一个依赖,可以使用特殊的版本值LATEST或者RELEASE,LATEST是指某个特定构建最新的发布版或者快照版。RELEASE是指仓库中最后的一个非快照版本;
属性引用:一个POM可以通过${}来包含对属性的引用,在Maven读取一个POM的时候,它会在载入POM XML的时候替换这些属性的引用;
env变量: 操作系统或者shell的环境变量;
project:POM的project属性,使用点标记的路径来引用POM元素的值;
settings:引用Maven settings信息,使用点标记来引用settings.xml文件中元素的值;
Java系统属性:所以可以通过java.lang.System中的getProperties()方法访问的属性可以成为POM属性,如${user.name},${user.home},${java.home}和${os.home};
项目依赖
依赖范围:
(1)compile编译范围:默认范围,编译范围依赖在所有的classpath中可用,同时它们也会被打包;
(2)provided已提供范围:provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用;
(3)runtime运行时范围:runtime依赖在运行和测试系统的时候需要,在编译的时候不需要;
(4)test 测试范围,一般在编译和运行时都不需要,只有在测试编译和测试运行阶段可用;
(5)system 系统范围:与provided类似,但是必须显示的提供一个对于本地系统中JAR文件的路径;
可选依赖
依赖版本界限
可以不必依赖声明某个特定的版本,可以指定一个满足给定依赖的版本界限,可以使用如下字符来围绕一个或多个版本号来实现版本界限:(,)不包含量词;[,]包含量词;即[3.8,4.0) 大于等于3.8 小于4.0版本;
传递性依赖
依赖管理
Maven在dependencyManagement元素中为你提供了一种方式来统一依赖版本号,使用pom.xml中的dependencyManagement元素能让你在子项目中引用一个依赖而不是显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个用于dependencyManagement元素中指定的版本号;
多模块项目
多模块项目是那些包含一些列待构建模块的项目。一个多模块项目的打包类型总是pom,很少生成一个构件。一个模块项目的存在只是为了将很多项目归类在一起,成为一个构建。
依赖归类:如果你有一组逻辑上归类在一起的依赖,你可以创建一个打包方式为pom项目来将这些依赖归在一起;当使用依赖归类技术的时候,会把依赖推入整个树的更深一层,当在选择用pom归类依赖或者用父POM的dependencyManagement的时候,需要留意这一点;
构建生命周期
Maven三种标准的生命周期:清理(clean) 默认(default) 站点(site)
clean:清理生命周期
clean包含三个阶段:pre-clean,clean,post-clean;
default:默认生命周期
validate,generate-source,process-source,generate-resources,process-resources,compile,process-classes,generate-test-source,process-test-source,generate-test-resources,process-test-resources,test-compile,test,prepare-package,package,pre-integration-test,integration-test,post-integration-test,verify,install,deploy;
site:站点生命周期
Maven不仅能从一个项目构建软件构件,还能为一个或者一组项目生成项目文档和报告,分为四个阶段:pre-site,site,post-site,site-deploy;
Profile做什么?Profile能让你为一个特殊的环境自定义一个特殊的构建。
一个构建的“可移植性”是指将一个项目在不同的环境中构建的难易度,一个不用做任何自定义配置或者属性文件配置就能工作的构建,比一个需要很多配置才能工作的构建,具有更高的可移植性。
Maven设计提供了使用profile自定义构建的能力,阻止不可移植的构建。
Maven中的profile是一组可选的配置,可以用来设置或者覆盖配置默认值。
Maven和m2eclipse
m2eclipse插件(http://m2eclipse.codehaus.org/)为Eclipse提供了maven的集成。m2Eclipse同时也以挂钩的方式连接了Subclipse插件和Mylyn插件的特性。Subclipse插件为m2eclipse提供了与Subversion仓库交互的能力,Mylyn插件为m2eclipse提供了与任务集中接口交互的能力,该接口能跟踪开发过程的上下文。
安装m2eclipse插件,Eclipse >=3.2 JDK >=1.4
http://www.eclipse.org/m2e/
AddSite:http://download.eclipse.org/technology/m2e/releases
Maven Archetype创建一个Maven项目,Maven的Archetype列表是由一个叫Nexus索引器生成的。Nexus是一个仓库管理器,它是一个包含了整个Maven仓库索引的文件,m2eclipse使用它来罗列出所有maven仓库中可用的archetype。
Maven仓库管理器 Nexus
仓库管理器有两个服务目的:首先它的角色是一个高度可配置的介于你的组织与公开Maven仓库之间的代理,其次它为你的组织提供了一个可部署你组织内部生成的构件的地方。
下载Nexus: http://nexus.sonatype.org/downloads
技巧:
如何使 maven+jetty运行时不锁定文件 http://rongjih.blog.163.com/blog/static/335744612010620341622/
分享到:
相关推荐
### 黑马Maven笔记第二天知识点总结 #### Maven的核心优势 **1. 统一管理JAR包** - **节省空间**:Maven通过中央仓库管理所有项目的依赖,避免了重复下载相同JAR包的问题,有效减少了硬盘空间的占用。 - **依赖...
### 黑马Maven笔记详解 #### Maven简介与特点 Maven是一款强大的项目管理和构建工具,作为Apache基金会下的一个开源项目,它完全采用Java语言编写,主要用于管理Java项目。Maven通过标准化项目构建过程和依赖管理...
Maven的安装: (首先保证JDK版本在1.6以上) 1: 通过配置MAVEN_HOME 和 %% %MAVEN_HOME%\bin 然后进行mvn -version 测试 掌握 -Xms 与 -Xmx的相关配置 2: Maven目录分析: 2.1: bin: 含有mvn运行的脚本 2.2...
### Maven核心知识点解析 #### Maven概述与价值 Maven是一个项目管理和综合工具,主要用于Java项目的构建、依赖管理和项目信息管理。通过Maven,开发者可以轻松地处理项目中的多个痛点问题,提升开发效率。 #####...
【标题】:“maven笔记:maven-overlay-实战笔记” 在 Maven 的世界里,"overlay" 是一个重要的概念,主要用于Web项目的构建和部署。Maven overlay 技术允许你将多个项目的输出“重叠”在一起,形成一个新的项目,...
【标题】"maven笔记t-JavaWeb"主要聚焦于Java Web开发中Maven的使用,这是一套关于Maven的教程,旨在帮助开发者理解和掌握这个强大的构建工具。Maven是Apache软件基金会的一个项目,它简化了Java项目的构建、管理和...
** Maven 概述 ** Maven 是一个强大的项目管理和构建工具,主要应用于Java项目。它通过提供一套标准化的构建过程,使得项目的...通过学习Maven笔记,开发者可以更好地掌握这一强大的工具,提升项目开发的专业水平。
【Maven笔记】 Maven是一个强大的Java项目管理工具,它主要解决了在软件开发过程中遇到的一系列问题,如依赖管理、项目构建以及环境一致性等。通过使用Maven,开发者可以更高效地管理和构建Java项目,避免手动复制...
**Maven笔记(2)-- 构建Java Project 及 Maven命令使用** Maven是Apache组织开发的一个项目管理和综合工具,主要用于Java项目构建、依赖管理和项目信息管理。它通过一个统一的构建过程,使得项目的构建变得简单且...
**Maven笔记** Maven是Apache组织开发的一款Java项目管理工具,它的主要功能包括项目构建、依赖管理和仓库管理。Maven使得Java开发更加规范和高效,尤其在大型团队协作中,能够有效地解决版本冲突和自动化构建的...
【尚硅谷Maven课程笔记代码资源】是一份全面学习Maven的资料集合,它涵盖了从基础到高级的各种知识点,旨在帮助开发者深入理解并熟练运用Maven进行自动化构建。该资源包含课件、源码和相关的笔记,使得学习过程更加...
压缩包中的"笔记"和"资料"文件可能包含更深入的Maven教程、最佳实践、常见问题解答和案例研究等内容。学习这些资料有助于提升你在实际项目中的Maven应用能力,解决遇到的问题,并优化构建流程。 综上所述,Maven是...
** Maven笔记 ** Maven是Java开发中的一个项目管理和综合工具,它简化了构建、依赖管理和项目的生命周期。本文将深入探讨Maven的核心概念、配置以及如何在实际开发中有效利用它。 ### Maven核心概念 1. **项目...
maven学习笔记maven学习笔记maven学习笔记
** Maven详解:构建Java项目的专业工具 ** Maven是一个基于项目对象模型(Project Object Model,POM)的概念,用于管理并构建Java项目。它通过一个简单的配置文件(pom.xml),自动化项目的构建、报告和依赖管理,...
Maven笔记,内包含Maven核心程序解压和配置,命令行环境,IDEA环境,jar包3下载失败问题的解决方案
Maven 是 Java 项目中一种流行的构建工具,能够帮助开发者更好地管理项目依赖关系、编译、打包和发布。下面是 Maven 的一些知识点: 1. Maven 的必要性:Maven 之所以需要,是因为在没有 Maven 之前,开发者需要...
【Maven笔记1】—— Maven入门 Maven是一款强大的Java项目管理和构建工具,它解决了传统项目构建中的诸多痛点,使得Java开发变得更加规范和高效。在本文中,我们将深入探讨Maven的基本概念、功能以及如何解决上述...