maven-笔记

本文介绍了Maven构建过程中的生命周期概念,详细解释了构建生命周期各阶段的作用,包括资源准备、编译、打包等,并列举了常用的Maven插件及其功能。

Maven - 构建生命周期

什么是构建生命周期

构建生命周期是一组阶段的序列(sequence of phases),每个阶段定义了目标被执行的顺序。这里的阶段是生命周期的一部分。
举例说明,一个典型的 Maven 构建生命周期是由以下几个阶段的序列组成的:

    prepare-resources    资源拷贝    本阶段可以自定义需要拷贝的资源
    compile    编译    本阶段完成源代码编译
    package    打包    本阶段根据 pom.xml 中描述的打包配置创建 JAR / WAR 包
    install    安装    本阶段在本地 / 远程仓库中安装工程包

一个目标是一个明确的任务,它可以作为单独的目标运行,或者作为一个大的构建的一部分和其它目标一起运行。一个目标是Maven中的一个“工作单元(unit of work)”。目标的例子包括Compiler插件中的compile目标,它用来编译项目中的所有源文件,或者Surefire插件中的test目标,用来运行单元测试。

注意:
当提到一个插件目标的时候,我们常常用速记符号:pluginId:goalId。例如,当提到Archetype插件的create目标的时候,我们写成archetype:create。

archetype 是插件
create 是目标

当 Maven 开始构建工程,会按照所定义的阶段序列的顺序执行每个阶段注册的目标。Maven 有以下三个标准的生命周期:
clean
default(or build)
site

Default (or Build) 生命周期
这是 Maven 的主要生命周期,被用于构建应用。包括下面的 23 个阶段。

    生命周期阶段    描述
    validate    检查工程配置是否正确,完成构建过程的所有必要信息是否能够获取到。
    initialize    初始化构建状态,例如设置属性。
    generate-sources    生成编译阶段需要包含的任何源码文件。
    process-sources    处理源代码,例如,过滤任何值(filter any value)。
    generate-resources    生成工程包中需要包含的资源文件。
    process-resources    拷贝和处理资源文件到目的目录中,为打包阶段做准备。
    compile    编译工程源码。
    process-classes    处理编译生成的文件,例如 Java Class 字节码的加强和优化。
    generate-test-sources    生成编译阶段需要包含的任何测试源代码。
    process-test-sources    处理测试源代码,例如,过滤任何值(filter any values)。
    test-compile    编译测试源代码到测试目的目录。
    process-test-classes    处理测试代码文件编译后生成的文件。
    test    使用适当的单元测试框架(例如JUnit)运行测试。
    prepare-package    在真正打包之前,为准备打包执行任何必要的操作。
    package    获取编译后的代码,并按照可发布的格式进行打包,例如 JAR、WAR 或者 EAR 文件。
    pre-integration-test    在集成测试执行之前,执行所需的操作。例如,设置所需的环境变量。
    integration-test    处理和部署必须的工程包到集成测试能够运行的环境中。
    post-integration-test    在集成测试被执行后执行必要的操作。例如,清理环境。
    verify    运行检查操作来验证工程包是有效的,并满足质量要求。
    install    安装工程包到本地仓库中,该仓库可以作为本地其他工程的依赖。
    deploy    拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程

Maven - 插件

Maven 实际上是一个依赖插件执行的框架,每个任务实际上是由插件完成。Maven 插件通常被用来:
创建 jar 文件
创建 war 文件
编译代码文件
代码单元测试
创建工程文档
创建工程报告
插件通常提供了一个目标的集合,并且可以使用下面的语法执行:
mvn [plugin-name]:[goal-name]

常用插件的列表:
插件    描述
clean    构建之后清理目标文件。删除目标目录。
compiler    编译 Java 源文件。
surefile    运行 JUnit 单元测试。创建测试报告。
jar    从当前工程中构建 JAR 文件。
war    从当前工程中构建 WAR 文件。
javadoc    为工程生成 Javadoc。
antrun    从构建过程的任意一个阶段中运行一个 ant 任务的集合。

常见插件介绍
http://shmilyaw-hotmail-com.iteye.com/blog/2170300
http://www.cnblogs.com/crazy-fox/archive/2012/02/09/2343722.html

外部依赖
工程依赖一个本地的jar,那么可以选择将该jar放到系统工程的src/lib下,那么在pom文件中可以如下:

      <dependency>
             <groupId>ldapjdk</groupId>
             <artifactId>ldapjdk</artifactId>
             <scope>system</scope>
             <version>1.0</version>
             <systemPath>${basedir}\src\lib\ldapjdk.jar</systemPath>
          </dependency>
外部依赖(library jar location)能够像其他依赖一样在 pom.xml 中配置。
指定 groupId 为 library 的名称。
指定 artifactId 为 library 的名称。
指定作用域(scope)为系统。
指定相对于工程位置的系统路径。

依赖范围
传递依赖发现可以通过使用如下的依赖范围来得到限制:
范围 描述
compile 编译阶段 该范围表明相关依赖是只在工程的类路径下有效。默认取值。
provided 供应阶段 该范围表明相关依赖是由运行时的 JDK 或者 网络服务器提供的。
runtime运行阶段 该范围表明相关依赖在编译阶段不是必须的,但是在执行阶段是必须的。
test 测试阶段 该范围表明相关依赖只在测试编译阶段和执行阶段。
system 系统阶段 该范围表明你需要提供一个系统路径。
import 导入阶段 该范围只在依赖是一个 pom 里定义的依赖时使用。同时,当前工程的POM 文件的 部分定义的依赖关系可以取代某特定的 POM。

下载方式:https://pan.quark.cn/s/a4b39357ea24 布线问题(分支限界算法)是计算机科学和电子工程领域中一个广为人知的议题,它主要探讨如何在印刷电路板上定位两个节点间最短的连接路径。 在这一议题中,电路板被构建为一个包含 n×m 个方格的矩阵,每个方格能够被界定为可通行或不可通行,其核心任务是定位从初始点到最终点的最短路径。 分支限界算法是处理布线问题的一种常用策略。 该算法与回溯法有相似之处,但存在差异,分支限界法仅需获取满足约束条件的一个最优路径,并按照广度优先或最小成本优先的原则来探索解空间树。 树 T 被构建为子集树或排列树,在探索过程中,每个节点仅被赋予一次成为扩展节点的机会,且会一次性生成其全部子节点。 针对布线问题的解决,队列式分支限界法可以被采用。 从起始位置 a 出发,将其设定为首个扩展节点,并将与该扩展节点相邻且可通行的方格加入至活跃节点队列中,将这些方格标记为 1,即从起始方格 a 到这些方格的距离为 1。 随后,从活跃节点队列中提取队首节点作为下一个扩展节点,并将与当前扩展节点相邻且未标记的方格标记为 2,随后将这些方格存入活跃节点队列。 这一过程将持续进行,直至算法探测到目标方格 b 或活跃节点队列为空。 在实现上述算法时,必须定义一个类 Position 来表征电路板上方格的位置,其成员 row 和 col 分别指示方格所在的行和列。 在方格位置上,布线能够沿右、下、左、上四个方向展开。 这四个方向的移动分别被记为 0、1、2、3。 下述表格中,offset[i].row 和 offset[i].col(i=0,1,2,3)分别提供了沿这四个方向前进 1 步相对于当前方格的相对位移。 在 Java 编程语言中,可以使用二维数组...
源码来自:https://pan.quark.cn/s/a4b39357ea24 在VC++开发过程中,对话框(CDialog)作为典型的用户界面组件,承担着与用户进行信息交互的重要角色。 在VS2008SP1的开发环境中,常常需要满足为对话框配置个性化背景图片的需求,以此来优化用户的操作体验。 本案例将系统性地阐述在CDialog框架下如何达成这一功能。 首先,需要在资源设计工具中构建一个新的对话框资源。 具体操作是在Visual Studio平台中,进入资源视图(Resource View)界面,定位到对话框(Dialog)分支,通过右键选择“插入对话框”(Insert Dialog)选项。 完成对话框内控件的布局设计后,对对话框资源进行保存。 随后,将着手进行背景图片的载入工作。 通常有两种主要的技术路径:1. **运用位图控件(CStatic)**:在对话框界面中嵌入一个CStatic控件,并将其属性设置为BST_OWNERDRAW,从而具备自主控制绘制过程的权限。 在对话框的类定义中,需要重写OnPaint()函数,负责调用图片资源并借助CDC对象将其渲染到对话框表面。 此外,必须合理处理WM_CTLCOLORSTATIC消息,确保背景图片的展示不会受到其他界面元素的干扰。 ```cppvoid CMyDialog::OnPaint(){ CPaintDC dc(this); // 生成设备上下文对象 CBitmap bitmap; bitmap.LoadBitmap(IDC_BITMAP_BACKGROUND); // 获取背景图片资源 CDC memDC; memDC.CreateCompatibleDC(&dc); CBitmap* pOldBitmap = m...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值