Maven 官网
Maven是什么?
-
Maven 是
Apache
开源组织奉献的一个纯Java
开发的开源项目。Maven
这个词可以翻译为“知识的积累”,也可以翻译为“专家”或“内行”。 -
Maven
的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM
)。开发人员只需做一些简单的配置,就可以批量完成项目的构建、报告和文档的生成工作。 -
Maven
统一集中管理好所有的依赖包,不需要程序员再去寻找,并且能够自动解决重复和冲突问题。Maven
作为一个开放的架构,方便同第三方插件集成,所以公司项目使用Maven
的比例在持续增长。 -
Maven
可以对Java
项目进行构建、依赖管理,也可被用于构建和管理各种项目,例如C#
,Ruby
,Scala
和其他语言
编写的项目。Maven
曾是Jakarta
项目的子项目,现为由Apache
软件基金会主持的独立Apache
项目。 -
Maven
是跨平台的,这意味着无论是在Windows
上,还是在Linux
或者Mac
上,都可以使用同样的命令。
Maven 特点
- 项目设置遵循统一的规则
- 任意工程中共享
- 依赖管理包括自动更新
- 一个庞大且不断增长的库
- 可扩展,能够轻松编写
Java
或脚本语言的插件 - 只需很少或不需要额外配置即可即时访问新功能
-
基于模型的构建 −>
Maven
能够将任意数量的项目构建到预定义的输出类型中,如JAR
,WAR
或 基于项目元数据的分发,而不需要在大多数情况下执行任何脚本 -
项目信息的一致性站点 −> 使用与构建过程相同的元数据,
Maven
能够生成一个网站或PDF,包括您要添加的任何文档,并添加到关于项目开发状态的标准报告中 -
发布管理和发布单独的输出 − >
Maven
将不需要额外的配置,就可以与源代码管理系统(如Subversion
或Git
)集成,并可以基于某个标签管理项目的发布。它也可以将其发布到分发位置供其他项目使用。Maven
能够发布单独的输出,如JAR
,包含其他依赖和文档的归档,或者作为源代码发布 -
向后兼容性 − > 您可以很轻松的从旧版本
Maven
的多个模块移植到Maven 3
中 - 子项目使用父项目依赖时,正常情况子项目应该继承父项目依赖,无需使用版本号
-
并行构建 −> 编译的速度能普遍提高
20 - 50 %
- 更好的错误报告 −>
Maven
改进了错误报告,它为您提供了Maven wiki
页面的链接,您可以点击链接查看错误的完整描述
Maven 的作用
-
Maven
统一集中管理好所有的依赖包,不需要程序员再去寻找 - 对应第三方组件用到的共同
ja
r,Maven
自动解决重复和冲突问题 -
Maven
作为一个开放的架构,提供了公共接口,方便同第三方插件集成。程序员可以将自己需要的插件,动态地集成到Maven
,从而扩展新的管理功能 -
Maven
可以统一每个项目的构建过程,实现不同项目的兼容性管理
Maven 功能
Maven
能够帮助开发者完成以下工作:
- 构建
- 文档生成
- 报告
- 依赖
- SCMs
- 发布
- 分发
- 邮件列表
约定配置
Maven
提倡使用一个共同的标准目录结构,Maven
使用约定优于配置的原则,大家尽可能的遵守这样的目录结构。如下所示:
目录 | 目的 |
---|---|
${basedir} |
存放pom.xml 和 所有的子目录 |
${basedir}/src/main/java |
项目的java 源代码 |
${basedir}/src/main/resources |
项目的资源,比如:property 文件,springmvc.xml
|
${basedir}/src/test/java |
项目的测试类,比如:Junit 代码 |
${basedir}/src/test/resources |
测试用的资源 |
${basedir}/src/main/webapp/WEB-INF |
web 应用文件目录,web 项目的信息比如:存放 web.xml 、本地图片、jsp 视图页面 |
${basedir}/target |
打包输出目录 |
${basedir}/target/classes |
编译输出目录 |
${basedir}/target/test-classes |
测试编译输出目录 |
Test.java |
Maven 只会自动运行符合该命名规则的测试类 |
~/.m2/repository |
Maven 默认的本地仓库目录位置 |