`
AILIKES
  • 浏览: 178873 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

maven2学习总结(4.生命周期和使用Maven进行编译)

阅读更多

生命周期

软件项目一般遵循一个相似的、熟悉的过程:准备、编写代码、测试、打包、安装。Maven适应各种不同的项目的路线称为构建生命周期。在Maven中,构建生命周期由一系列阶段组成,每个阶段可以实施一个或者多个和该阶段相关的行动(Action),或目标(goal)。例如,编译阶段调用一组目标(goal)去编译类。

在Maven中的标准构建生命周期中,你每天都会执行特定的阶段的工作。例如,你告诉Maven你打算去编译或测试,或打包,或安装。这些你需要去执行的Action,被高水平的启动并且Maven在幕后处理了细节的操作。需要去注意到重要一点是,生命周期中的每个阶段都将被执行,直至包括你指定的阶段。如果你告诉Maven去编译,那么校验、初始化、生成源文件、处理源文件、生成资源以及编译阶段都将被执行。

常规的构建生命周期包括很多阶段,这些可以被看作是扩展点。当你需要添加一些功能到生命周期中去,你可以通过插件来完成。Maven插件提供了可重用的构建逻辑,可以被插入标准的构建流程。任何时候你想自定义你的项目的构建过程,要么你可以使用一个已有的插件,或者创建一个定制的插件。查看2.7章使用Maven插件来获得定制Maven构建的示例。

完整的maven生命周期:

生命周期 阶段描述
validate 验证项目是否正确,以及所有为了完整构建必要的信息是否可用
generate-sources 生成所有需要包含在编译过程中的源代码
process-sources 处理源代码,比如过滤一些值
generate-resources 生成所有需要包含在打包过程中的资源文件
process-resources 复制并处理资源文件至目标目录,准备打包
compile 编译项目的源代码
process-classes 后处理编译生成的文件,例如对Java类进行字节码增强(bytecode enhancement)
generate-test-sources 生成所有包含在测试编译过程中的测试源码
process-test-sources 处理测试源码,比如过滤一些值
generate-test-resources 生成测试需要的资源文件
process-test-resources 复制并处理测试资源文件至测试目标目录
test-compile 编译测试源码至测试目标目录
test 使用合适的单元测试框架运行测试。这些测试应该不需要代码被打包或发布
prepare-package 在真正的打包之前,执行一些准备打包必要的操作。这通常会产生一个包的展开的处理过的版本(将会在Maven 2.1+中实现)
package 将编译好的代码打包成可分发的格式,如JAR,WAR,或者EAR
pre-integration-test 执行一些在集成测试运行之前需要的动作。如建立集成测试需要的环境
integration-test 如果有必要的话,处理包并发布至集成测试可以运行的环境
post-integration-test 执行一些在集成测试运行之后需要的动作。如清理集成测试环境。
verify 执行所有检查,验证包是有效的,符合质量规范
install 安装包至本地仓库,以备本地的其它项目作为依赖使用
deploy 复制最终的包至远程仓库,共享给其它开发人员和项目(通常和一次正式的发布相关)

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/abigfrog/archive/2008/10/22/3123776.aspx

使用Maven进行编译

正如在介绍的文章中所提到的,要完成预定的任务,你是在一个很高的层次,使用声明的方式来告知Maven如何做的。在你开始编译前,注意在这个简单命令的背后所显示的四个Maven基础工作步骤:

•通过配置进行约定
•重用构建逻辑
•声明式执行
•有序的依赖组织
这些准则存在于Maven的方方面面,但下面对简单编译命令的分析,向你展示了这四个准则的工作情况,并明确它在简化开发中所起的重要作用。

切换大<my-app>目录,<my-app>是my-app项目的基础目录,使用${basedir}表示。下面,你将使用如下命令编译你的源代码:

C:\mvnbook\my-app> mvn compile

执行完成后,你将得到和如下类似的输出:

1.[INFO--------------------------------------------------------------------
2.[INFO] Building Maven Quick Start Archetype
3.[INFO] task-segment: [compile]
4.[INFO]-------------------------------------------------------------------
5.[INFO] artifact org.apache.maven.plugins:maven-resources-plugin: checking for
6.updates from central
7....
8.[INFO] artifact org.apache.maven.plugins:maven-compiler-plugin: checking for
9.updates from central
10....
11.[INFO] [resources:resources]
12....
13.[INFO] [compiler:compile]
14.Compiling 1 source file to c:\mvnbook\my-app\target\classes
15.[INFO]-------------------------------------------------------------------
16.[INFO] BUILD SUCCESSFUL
17.[INFO]-------------------------------------------------------------------
18.[INFO] Total time: 3 minutes 54 seconds
19.[INFO] Finished at: Fri Sep 23 15:48:34 GMT-05:00 2005
20.[INFO] Final Memory: 2M/6M
21.[INFO]-------------------------------------------------------------------
 

现在让我们分析下究竟发生了什么,并且看下在看起来很简单的命令下,之前提到的四个基础工作是如何进行的。

Maven是如何知道从哪里找到要编译的源文件?并且Maven如何知道将编译好的类文件放到哪里?这里就是由Mave基础工作之一“通过配置进行约定”所解决的问题。一般情况下,源文件放在src/main/java路径下,这种默认设置(虽然在上面的POM文件中并没看到)是从Super POM继承来的。即使最简单的POM也知道源文件的默认位置。这意味着如果你的源文件存在于默认位置的话,你不需要在POM里面明确设置这些位置。当然,你也可以覆盖默认的位置,但并不推荐这样做。这同样也适用于编译后的类文件的默认位置是target/classes。

究竟是什么编译了应用程序的源文件?这就是Maven的基础工作之二——“重用构建逻辑”的功劳了。默认设置里的标准编译器插件,被用来编译应用程序的源文件。同样的构建逻辑可以在任务数量的项目上通用。

虽然你现在知道了编译器插件被用来编译应用程序的源文件,那么Maven是如何决定去使用这个编译器的那?你可能猜测存在一个后台进程映射了一个简单命令到某个插件。实际上,存在一个名为默认的build life cycle。

那么,现在你知道了Maven如何去找到应用程序源代码,Maven使用什么去编译源代码,并且如何去调用编译器插件。下一个问题就是,Maven从哪里得到的这个编译器插件?毕竟,在Maven安装过程中,你看不到这个编译器插件,因为它不随Maven安装包一起发布,相反,Maven会在用到他们的时候再下载。

当你首次执行这个命令(或其他命令)的时候,Maven会下载所有插件以及相关的文件。如果从一个简洁的Maven安装开始,可能需要一段时间(对于前面提到的来说,宽带下载的话可能需要4分钟左右)。下次你再执行同一个命令的时候,因为Maven已经有了它所需要的,就不会再需要下载什么了,因此,Maven会比以前更快的执行此命令。

从输出你可以看出来,编译后的类文件被放在了target/classes中,这是在默认设置中定义的。如果你是一个仔细的观察者的话,你会发现使用一般的约定会让你的POM非常小,没有了告知Maven到哪里去找源代码,或输出文件放在哪的必要。使用默认的配置,你往往可以事半功倍。

分享到:
评论

相关推荐

    Maven2 的新特性.7z

    在Maven2中有了明确的生命周期概念,而且都提供与之对应的命令,使得项目构建更加清晰明了。主要的生命周期阶段: • validate,验证工程是否正确,所有需要的资源是否可用。 • compile,编译项目的源代码。 • ...

    Maven的生命周期阶段.docx

    Maven的生命周期就是对所有的构建过程进行抽象和统一。包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有的构建步骤。 Maven的生命周期是抽象的,即生命周期不做任何实际的...

    apache-maven-3.9.6-bin.tar.gz

    &gt;**1、构建生命周期:** Maven有一套定义好的构建生命周期,可以根据项目的需求自动执行不同阶段的任务(例如编译、测试、打包等)。 \ **2、依赖管理:** Maven提供了强大的依赖管理功能,可以自动下载和管理项目所...

    apache-maven-3.9.5-bin windows 64bit x86下载

    3、项目生命周期管理:Maven提供了一系列的构建阶段(如编译、测试、打包、部署等),你可以在pom.xml中配置这些阶段的行为,Maven会按照定义好的生命周期来执行相应的操作。 4、插件系统:Maven支持插件机制,你...

    Eclipse整合Maven开发教程

    4.2 Maven生命周期 13 4.3 Run As 15 4.4 Maven Build(compile) 16 4.5 Maven Build(package) 16 4.6 Maven Install(安装) 17 4.7 Maven Clean 18 4.8 新建Web工程 18 4.9 运行Web工程 19 5. 依赖...

    maven课程讲义.doc

    关于maven的学习资料Maven是apache下的开源项目,项目管理工具,管理java项目。 1、项目对象模型 (Project Object Model) POM对象模型,每个maven工程中都有一个pom.xml文件,定义工程所依赖的jar包、本工程的坐标...

    Maven3实战笔记04Maven的生命周期和插件

    Maven的生命周期其实是指它对所有的构建过程进行了反复的推敲、反思,之后总结了一套高度抽象过程。这个过程是高度完善的、容易扩展的。基本上包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署、...

    maven3教程(私塾在线)视频配套学习资料

    4、maven命令:重点理解【生命周期和阶段】和【插件和目标】 5、在eclipse中通过m2eclipse插件使用maven 6、配置和使用私服 7、实战maven,把以前一个不是用maven做的模块,移植为maven项目 这是这次学习的重中...

    maven window下安装包

    第7章:生命周期和插件/7.5 插件配置/7.5.2 POM文件中进行插件参数设置 第7章:生命周期和插件/7.5 插件配置/7.5.3 POM文件中进行插件任务设置 第7章:生命周期和插件/7.6 获取插件信息/7.6.1 在线插件信息 第7章:...

    Maven是一个项目管理工具,它包含了一个对象模型 一组标准集合,一个依赖管理系统 和用来运行定义在生命周期阶段中插件目标和逻辑

    Maven的核心功能是合理叙述项目间的依赖关系,通俗点 就是通过pom.... 使用maven完成项目的构建,项目构建包括:清理,编译,部署等过程,maven将这些过程规范为一个生命周期 maven管理项目生命周期都是基于插件完成的

    Maven 3.6.1安装包,在 Windows 系统上使用该资源来快速搭建和管理 Maven 环境

    项目生命周期管理:通过 Maven,您可以定义项目的生命周期,规定各个阶段的任务和顺序,并轻松执行这些任务。 多模块项目管理:如果您正在开发复杂的多模块项目,Maven 可以帮助您管理模块之间的依赖关系

    个人Maven学习笔记

    开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认生命周期。 在多个开发团队环境时,Maven可以设置按标准在非常短的时间里完成配置工作。由于大部分项目的设置都很简单,并且可重复使用,...

    maven笔记.docx

    Maven是一个强大的项目构建工具和依赖管理工具,用于简化和自动化Java...生命周期和阶段: Maven将构建过程划分为生命周期和阶段。生命周期表示构建的不同阶段,如clean、validate、compile、test、package、install和d

    apache-maven-3.3.9.zip

    开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期。 在多个开发团队环境时,Maven可以设置按标准在非常短的时间里完成配置工作。由于大部分项目的设置都很简单,并且可重复使用...

    Maven:构建和管理Java项目Maven:构建和管理Java项目

    maven ...强调 Maven 的生命周期和插件机制,以及如何使用插件扩展 Maven 的功能。 第三部分:Maven 的优势和应用 探讨 Maven 在项目开发中的优势和受欢迎程度。解释 Maven 的模块化和标准化特点,

    maven的优缺点 项目

    3.6.生命周期 Maven -build:javac;编译 Maven-install:java先编译,后运行 在项目的target中会生成jar包和war包, 在仓库中生成相应的目录,里面的放的是jar包和war包 Maven-clean:会把项目中的class文件和...

    apache-maven-3.8.1

    Maven包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System)和用来运行【定义在生命周期阶段(phase)中插件(plugin)...

    Maven介绍与安装和配置

    Maven 是使用 Java 语言编写的,因此它和 Java 一样具有跨平台性,这意味着无论是在 Windows ,还是在 Linux 或者 Mac OS 上,都可以使用相同的命令进行操作。 Maven 简化并标准化了项目构建过程。它将项目的编译,...

    Maven 构建生命周期

    Maven 构建生命周期 Maven 构建生命周期定义了一个项目构建跟发布的过程。 一个典型的 Maven 构建(build)生命周期是由以下几个阶段的序列组成的: 阶段 处理 描述 验证 validate 验证项目 验证项目是否...

    xjar-maven-plugin:XJar-Maven-Plugin是对XJar的一个Maven插件封装,实现可通过Maven命令或绑定在Maven的生命周期之中执行,以更便捷的方式集成XJar

    XJar-Maven-Plugin是对的一个Maven插件封装,实现可通过Maven命令或绑定在Maven的生命周期之中执行,从而更加便捷的方式集成了 。 GitHub: : 什么是XJar XJar是基于对JAR包内部资源的加密以及扩展ClassLoader来...

Global site tag (gtag.js) - Google Analytics