坐标
例如上篇helloworld的pom.xml配置文件中的
<groupId>com.zhaoyang</groupId> <artifactId>HelloWorld</artifactId> <version>1.0-SNAPSHOT</version>
其实就是坐标,那么Maven的坐标元素包括groupId、artifactId、version、packaging、classifier
当一个项目通过依赖,插件或者父项目引用与另外一个项目关联的时候,Maven通过坐标来精确定位一个项目。
groupId: 团体,公司,小组,组织,项目,或者其它团体。团体标识的约定是,它以创
建这个项目的组织名称的逆向域名开头。
artifactId: 在groupId下的表示一个单独项目的唯一标识符
version: 定义项目的版本
packaging:打包方式,比如:jar或者war,默认是jar
classifier: 表示构建的jdk版本,我们不能直接定义
---------------------------------------------------------------------------------------------------------------
我们把开始的HelloWorld项目安装到本地仓库,运行mvn clean install
那么现在去本地仓库目录下查看那个项目,我们就可以理解坐标在仓库中的构成
如下图:
注:maven的坐标并不只是指一个对应的jar文件,而是包括它的依赖等,我们通过坐标可以精确地定位到这个maven项目。
Maven的生命周期(Life Cycle)
什么是生命周期?
生命周期是指我们对项目的清理,初始化,编译,测试,打包,集成测试,验证,部署,站点生产等等一系列的流程,但是每个公司都是用不同的方式来做这些同样的事情,那么Maven它就给我们把这些过程(称为构建过程)进行了抽象和统一
Maven有三套独立的生命周期,它们分别是clean , default, site
1) clean 生命周期是用于清理项目 (默认是删除 target 文件夹)
2) default 生命周期是用于构建项目
3) site 生命周期是用于建立项目站点
clean生命周期
pre-clean | 清理之前的准备 |
clean | 进行清理工作,通常是删除target文件夹 |
post-clean | 清理之后的准备工作 |
validate | 验证项目是否正确,以及所有为了完整构建必要的信息是否可用 |
initialize | 初始化 |
generate-sources | 生成所有需要包含在编译过程中的源代码 |
process-sources | 处理源代码,比如过滤一些值 |
generate-resources | 生成所有需要包含在打包过程中的资源文件 |
process-resources | 处理并复制资源文件至目标目录,准备打包 |
compile | 编译项目的源代码 |
process-classes | 处理编译生成的文件,例如对Java类进行字节码增强 |
generate-test-sources | 生成所有包含在测试编译过程中的测试源码 |
process-test-sources | 处理测试源码,比如过滤一些值 |
generate-test-resources | 生成测试需要的资源文件 |
process-test-resources | 处理并复制测试资源文件至测试目标目录 |
test-compile | 编译测试源码至测试目标目录 |
process-test-classes | 处理编译生成的文件,例如对Java类进行字节码增强 |
test | 使用合适的单元测试框架运行测试,这些测试应该不需要代码被打包或发布 |
prepare-package | 在打包之前,执行一些必要的准备操作 |
package | 将编译好的代码打包成可分发的格式,如JAR,WAR,或者EAR |
pre-integration-test | 执行一些在集成测试运行之前需要的动作,如建立集成测试需要的环境 |
integration-test | 如果有必要的话,处理包并发布至集成测试可以运行的环境 |
post-integration-test | 执行一些在集成测试运行之后需要的动作,如清理集成测试环境。 |
verify | 执行所有检查,验证包是有效的,符合质量规范 |
install | 安装包至本地仓库,以备本地的其它项目作为依赖使用 |
deploy | 复制最终的包至远程仓库,共享给其它开发人员和项目 |
pre-site | |
site | |
post-site | |
site-deploy |
注:在每个生命周期的不同阶段,如果执行了后面阶段,前面的就会自动执行
比如我们执行
mvn clean 就相当于执行了 pre-clean 以及 clean
mvn test 就相当于执行了 validate --> initialize --> … -->compile-->…--->test
仓库
在Maven世界中,任何一个依赖、插件或者项目的构建输出,都可以称为构件。任何一个构件都有一组坐标唯一标识。
得益于坐标机制,任何Maven项目使用任何一个构件的方式都是完全相同的。在此基础上,Maven可以在某个位置统一存储所有Maven项目共享的构件,这个统一的位置就是仓库。
对于Maven来说,仓库只分为两大类:本地仓库和远程仓库。当Maven根据坐标寻找构件的时候,它首先会查看本地仓库,如果本地仓库存在此构件,则直接使用;如果本地仓库不存在此构件,Maven就会去远程仓库查找,发现需要的构件之后,下载到本地仓库再使用。
依赖管理(maven最强大的特性)
什么是依赖管理(Dependency Management)?
简单地说,比如我们的java项目一般都是会依赖其他的包,在maven的世界里,这些被依赖的包被称为dependency,就如开头我们在配置文件中配置的一样,而dependency又是其他工程的坐标。
依赖的传递性(Transitive Dependencies)
在Maven中一个依赖不仅仅是一个JAR。它是一个POM文件,这个POM可能也声明了对其它构件的依赖。这些依赖的依赖叫做传递性依赖,Maven仓库不仅仅存贮二进制文件,也存储了这些构建的元数据(metadata)
比如假如你的项目依赖于一个库,而这个库又依赖于五个或者十个其它的库(就像Spring或者Hibernate那样)。你不必找出所有这些依赖然后把它们写在你的pom.xml里,你只需要加上你直接依赖的那些库,Maven会隐式地把这些库间接依赖的库也加入到你的项目中。Maven也会处理这些依赖中的冲突,同时能让你自定义默认行为,或者排除一些特定的传递性依赖
Maven也提供了不同的依赖范围(dependency scope),比如我们上个项目配置的JUNIT
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.7</version> <scope>test</scope> </dependency>
其中的scope为test就是说明只有在运行测试编译的时候才会加入到classpath中
注:
当为项目创建JAR文件的时候,它的依赖不会被捆绑在生成的构件中,它们只是用来编
译。当用Maven来创建WAR或者EAR,你可以配置Maven让它在生成的构件中捆绑依赖,
你也可以配置Maven,使用provided范围,让它排除WAR文件中特定的依赖。provided范
围告诉Maven一个依赖在编译的时候需要,但是它不应该被捆绑在构建的输出中。当你
开发web应用的时候provided范围变得十分有用,你需要通过Servlet API来编译你的代
码,但是你不希望Servlet API的JAR文件包含在你web应用的WEB-INF/lib目录中。
来源: http://www.cnblogs.com/zhaoyang/archive/2012/01/07/2315451.html
相关推荐
Maven的核心概念是POM,这是一个XML文件,包含了项目的配置信息,如依赖关系、构建目标、插件和构建过程。POM使得开发者可以声明项目依赖,并自动解决这些依赖,从远程仓库下载必要的库文件,避免了手动管理类库的...
** Maven 3 入门 — 创建 Web 应用程序指南** Maven 是一款强大的项目管理和构建工具,尤其在Java开发领域广泛使用。它通过提供一套标准化的构建过程和依赖管理机制,使得开发者能够更高效地管理项目。在本文中,...
POM 是 Maven 的核心概念,它是一个XML文件(pom.xml),包含了项目的配置信息,如项目描述、依赖、构建目标、构建插件等。POM 文件位于项目根目录下,用于指导 Maven 如何构建项目。它还负责管理项目依赖,确保项目...
#### 五、Maven入门实践 ##### 1. 命令行创建Maven工程 - **目标**:构建一个由Maven管理的项目。 - **步骤**: 1. 创建项目目录(如`F:\develop\maven\test`)。 2. 进入该目录。 3. 使用`mvn archetype:create`...
这篇“Maven初涉 - 1”可能是博主Kavinhub分享的入门教程,旨在引导新手了解并掌握Maven的基本概念和用法。 **一、Maven简介** Maven由Apache软件基金会开发,它的核心理念是通过一个统一的构建过程来管理项目。...
Apache Maven的核心功能包括: 1. **依赖管理**:Maven通过中央仓库自动下载项目所需的库文件,如JARs,解决了开发者手动管理库文件的繁琐工作。开发者只需要在POM.xml文件中声明依赖,Maven就会自动处理。 2. **...
【标题】"maven+springside 开发入门"涉及的主要知识点是 Maven 和 Springside 这两个关键的Java开发工具。Maven 是一个项目管理和综合工具,它可以帮助开发者构建、管理和部署Java项目,而Springside则是一个基于...
#### 一、Maven简介与核心概念 **1.1 Maven是什么?** Maven是一个项目管理和理解工具,它提供了一个项目对象模型(POM),一组标准集合,一个项目生命周期,一个依赖管理系统,以及用来运行所有这些的工具和规范。 ...
Maven的核心概念包括项目对象模型(POM)、依赖管理和生命周期。POM是Maven项目的基础,它定义了项目的配置信息,包括项目属性、依赖、构建目标等。依赖管理则允许项目声明所需的库,并自动处理这些库的下载和版本...
#### 一、Maven与多模块项目基础概念 - **Maven**:Apache Maven 是一款项目管理和构建工具,基于项目对象模型(POM),通过一组规范完成项目的构建、报告和文档。Maven 的目标是让构建过程简单化、标准化。 - **多...
Maven的快速入门包括配置环境变量、了解Maven的仓库概念以及基本的构建命令。Maven的仓库分为本地仓库和远程仓库,本地仓库用于存储本地项目依赖的jar包,远程仓库则是Maven中央仓库或其他第三方仓库,用于当本地...
Maven 的核心概念是 POM,它是一个 XML 文件,包含了项目的基本信息、构建配置、依赖关系、插件配置等。通过 POM,Maven 可以理解项目的需求并据此执行相应的构建任务。 【 Maven 安装与配置】 - **下载 Maven**:...
1. **Maven 的核心概念** - **项目对象模型 (POM)**:POM 是 Maven 项目的配置文件,通常为 `pom.xml`,它包含了项目的基本信息(如组ID、artifactID、版本)、依赖关系、构建配置等。 - **组ID (Group ID)**:...
通过这个项目,开发者可以理解 Maven 的项目对象模型(Project Object Model, POM)、依赖管理和构建生命周期等核心概念。 【标签】"Java" 指出这个项目是使用 Java 编程语言编写的。Java 是一种广泛使用的面向对象...
1. Maven的核心概念: - **POM(Project Object Model)**:POM是Maven项目的核心,是一个XML文件,包含了项目的基本信息,如项目名称、版本、依赖关系、构建目标等。 - **仓库(Repository)**:Maven使用仓库来...
### Maven入门教程详解 #### Maven概述 Maven是一款强大的项目管理和构建工具,广泛应用于Java项目的构建、依赖管理和项目信息管理。Maven通过一系列预定义的生命周期、构建规则以及项目对象模型(POM)来实现自动...
3. **conf** 目录:包含了Maven的配置文件,其中最重要的是`settings.xml`,这个文件定义了Maven的全局设置,如本地仓库位置、远程仓库地址、镜像配置等。 4. **lib** 目录:存放了Maven运行所需的全部库文件,包括...
### Maven使用入门知识点详解 #### 一、Maven概述 ...掌握了Maven的核心概念和技术,可以帮助开发者更高效地管理项目,提高开发效率。无论是初学者还是经验丰富的开发者,都能够从学习Maven中获益良多。
总结来说,《Maven实战》是一本全面的Maven学习资料,它不仅详尽地覆盖了Maven的基础知识,还深入地介绍了Maven的核心概念和高级应用,是一本适合从初级到高级不同层次Java开发者的Maven学习手册。