- 浏览: 793461 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (651)
- Java (39)
- Java 初学者小问题 (66)
- 设计模式 (7)
- 项目管理 (3)
- 数据库 (1)
- 算法 (2)
- Java practices (6)
- Effective Java2读书笔记 (78)
- Linux (2)
- programming ruby 读书笔记 (5)
- Core Java Ninth Edition Volume I 读书笔记 (15)
- Pro Git 读书笔记 (12)
- Git (3)
- Maven in Action 读书笔记 (20)
- Web (12)
- 非技术类书籍 (11)
- 电影 (40)
- Web Cache (1)
- jquery (0)
- 历史 (4)
- Dive Into HTML5 读书笔记 (13)
- 三国演义小学毕业考 (79)
- 高效能人士的7个习惯 读书笔记 (12)
- Java Performance 读书笔记 (3)
- Protocol Buffer 学习笔记 (6)
- Mongo DB 学习笔记 (7)
- Morphia 学习笔记 (7)
- Algorithms -- Princeton 学习笔记 (13)
- String研究 (10)
- Hadoop: The Definitive Guide 读书笔记 (3)
- Java与模式读书笔记 (5)
- Date研究 (3)
- The Roman Empire 听课笔记 (4)
- Algorithms -- Standford 学习笔记 (16)
- Core Java Ninth Edition Volume II 读书笔记 (9)
- Thinking in Java 4th Edition 读书笔记 (21)
- Node : Up and Running 学习笔记 (5)
- Eloquent Javascript (8)
- Smashing Node.js 读书笔记 (1)
- Algorithms II -- Standford 学习笔记 (19)
- Algorithm II -- Princeton 学习笔记 (14)
- 网络安全 (2)
- Javascript (4)
- 正则表达式 (1)
- JAVA 7/8 (15)
- JVM (10)
- NodeJS (1)
- 鸟哥的linux私房菜读书笔记 (14)
- Web Service (1)
- The art of programming (9)
- Introduction to Algorithm 读书笔记 (4)
- Java 源码阅读 (0)
- Spring in Action 读书笔记 (2)
- Java Network Programming 读书笔记 (2)
最新评论
-
心存高远:
谢谢作者分享,刚好看到这里不太明白,现在茅塞顿开。不过runt ...
关于 Maven的传递依赖的理解 -
sxlkk:
851228082 写道甚至在某次技术会议现场遇到《Maven ...
关于 Maven的传递依赖的理解 -
851228082:
851228082 写道a----compile----b-- ...
第五章 坐标和依赖 -
851228082:
a----compile----b-----provided- ...
第五章 坐标和依赖 -
851228082:
甚至在某次技术会议现场遇到《Maven in action》的 ...
关于 Maven的传递依赖的理解
1. 编写 Maven 插件的主要步骤
1) 创建一个 maven-plugin 项目:插件本身也是 Maven 项目,但它的 packaging 必须为 maven-plugin ,我们可以用 maven-archetype-plugin 快速创建一个 Maven 插件项目。
2) 为插件编写目标: Maven 称之为 Mojo ( Maven Old Java Object )
3) 为目标提供配置点
4) 编写代码实现目标行为:必须提供一个或多个继承自 AbstractMojo 的类。
5) 错误处理及日志
6) 测试插件
2. 可以运行 mvn archetype:generate ,选择:
maven-archetype-plugin ( An archetype which contains a sample Maven Plugin. )
生成插件项目骨架。
3. Maven 插件项目的 POM 有两个特殊的地方:
1) packaging 为 maven-plugin
2) 依赖了 org.apache.maven:maven-plugin-api 提供了插件开发所必需的类。
4. 每个插件目标类,或者说 Mojo 都必须:
1) 继承自 AbstractMojo
2) 实现 execute 方法 ()
3) 在 class 上添加 @goal 标注,定义目标名称
5. 在插件目标类的成员变量上添加 @parameter 标注,表示用户可以在作用该插件的时候在 POM 中配置该字段。如:
@param private String[] includes;
可以在 POM 的该插件配置中添加:
<configuration> <includes> <include>java</include> <include>sql</include> </include> </configuration>
6. 可以用 @param expression=”${project.basedir}” 标注成员变量,表示从系统属性读取字段值。 @readonly 标注表示不允许用户对其进行配置。
7. 实现插件目标类时,当遇到无法处理的 Exception 可以将其包在 MojoExecutionException 中抛出, Maven 执行插件目标的时候,如果遇到 MojoExecutionException ,就会在命令行显示“ BUILD ERROR ”。
8. AbstractMojo 的 getLog() 方法可以返回一个类似 Log4j 的日志对象,可以用来将输出日志到 Maven 命令行。
9. Mojo 标注:
1) @goal <name> 插件目标的名称
2) @phase <phase> 插件目标默认绑定到 default 生命周期的某个阶段
(如 maven-surefire-plugin:test 就有 @phase test 标注)
3) @requiresDependencyResolution <scope> 在运行该 Mojo 之前必须解析所有指定范围的依赖,默认值为 runtime ,可选值为 compile 、 test 和 runtime 。
(如 maven-surefire-plugin:test 就有 @requiresDependencyResolution test 标注)
4) @requiresProject <true/false> 是否必须在一个 Maven 项目中运行,默认为 true 。大多数插件目标都为 true 。但 maven-help-plugin:system 是用来显示系统属性和环境变量的,其值为 false 。还有 maven-archetype-plugin:generate 也不需要在特定项目中运行。
5) @requiresDirectInvocation <true/false> 是否只能在命令行调用,而不能在 POM 中绑定到生命周期阶段。默认为 false 。
6) @requiresOnline <true/false> 是否要求 Maven 是在线状态,默认是 false 。
7) @requiresReport <true/false> 是否要求项目报告已经生成,默认是 false 。
8) @aggregator 当 Mojo 在多模块项目上运行时,只在顶层模块运行。比如 maven-javadoc-plugin:aggregator-jar 只会为多模块项目的顶层项目生成一个已经聚合的 Javadoc 文档。
9) @execute goal= “<goal>” 在运行该目标之前先让 Maven 运行另一个指定目标,如果那个目标也是本插件的目标,则可以省略目标前缀。如 maven-pmd-plugin:check 用来验证 maven-pmd-plugin:pmd 生成的源码分析报告,所以它用了标注 @execute goal=”pmd”
10)@ execute phase=”<phase>” 在运行该目标之前先让 Maven 运行一个并行的生命周期到指定阶段为止。如 maven-dependency-plugin:analyze 使用了标注 @execute phase=”test-compile” 。
11) @execute lifecycle=”<lifecycle>” phase=”<phase>” 在运行该目标之前让 Maven 先运行一个自定义的生命周期到指定阶段为止。如 maven-surefire-report-plugin:report 使用了标注 @execute lifecycle=”surefire” phase=”test” 。自定义生命周期的配置文件位于 src/main/resources/META-INF/maven/lifecycle.xml ,如 :
<lifecycles> <lifecycle> <id>surefire</id> <phases> <phase> <id>test</id> <configuration> <testFailureIgnore>true</testFailureIgnore> </configuration> </phase> </phases> </lifecycle> </lifecycles>
干什么用的?
10. 我们可以用 @parameter 将 Mojo 的某个字段定义为可配置参数,可以在 POM 中配置如下:
1) Boolean 、 boolean:
<param-name>true</param-name>
2) Integer 、 Long 、 Short 、 Byte 、 int 、 long 、 short 、 byte :
<param-name>8</param-name>
3) Float 、 float 、 Double 、 double :
<param-name>8.8</param-name>
4) String 、 StringBuffer 、 Character 、 char :
<param-name>Hello World</param-name>
char 和 Character 会怎么处理?
5) Date :
<param-name>2010-06-06 3:14:55.1 PM</param-name>
或
<param-name>2010-06-06 3:14:55PM</param-name>
6) File :
<param-name>C:\tmp</param-name>
不是路径格式怎么办?
8) URL :
<param-name>http://www.juvenxu.com</param-name>
9) 数组、 Collection
<param-names>
<param-name>value1</param-name>
<param-name>value2</param-name>
</param-names>
10) Map :
<param-name>
<key1>value1</key1>
<key2>value2</key2>
</param-name>
11) Properties :
<param-name>
<property>
<name>name1</name>
<value>value1</value>
</property>
</param-name>
配置的值不法解析成对应格式怎么办?
11. @parameter alias=”<aliasName>” 可以让用户以 aliasName 在 POM 中配置插件参数。
@parameter expression=”${SystemProperty} 可以让用户在命令行配置参数。如 maven-surefire-plugin:test 就有如下代码:
@parameter expression=“${maven.test.skip}”
private boolean skip;
所以用户可以在 POM 中配置 skip 参数,也可以在命令行配置 -Dmaven.test.skip=true 参数。
@parameter default-value=”aValue” 如果用户没有配置该 Mojo 参数,就为其提供一个默认值,可以是常量也可以是表达式。
@readonly 表示参数是只读的。
@required 表示参数是必须的,如果没有配置也没有默认值, Maven 会报错。
12. AbstractMojo 的 execute 方法会抛出两种 Exception :
1) MojoExecutionException ,插件运行时发现了未预期的错误, Maven 会显示“ BUILD ERROR ”
2) MojoFailureException ,插件运行时发现了预期的错误, Maven 会显示“ BUILD FAILURE ”
13. AbstractMojo 的 getLog() 方法得到的 log 对象支持四种级别的日志:
1) debug , Maven 默认不会输出该级别的日志。可以添加 -X 参数开启调试日志。
2) info ,默认会输出。
3) warn ,默认会输出,表示有问题或错误,但不会导致运行失败。
4) error ,默认会输出,表示错误严重到 Mojo 无法继续运行。
14. 测试 Maven 插件,需要有一组实际的 Maven 测试项目,在测试项目的 POM 中配置待测试的 Maven 插件,然后在测试项目上运行 Maven 构建,最后再验证该构建是否成功,且输出是否符合预期。 maven-inoker-plugin 能够用来在一组测试项目上执行 Maven 构建,并检查每个项目的构建是否成功,最后它还可以执行 BeanShell ( http://www.beanshell.org )或 Groovy ( http://groovy.codehaus.org )脚本来验证项目构建的输出。
15. 使 用 maven-invoker-plugin 进行 Maven 插件集成测试的步骤:
1) 在待测试的插件项目的 POM 中配置:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-invoker-plugin</artifactId> <version>1.5</version> <configuration> <projectsDirectory>src/it</projectsDirectory> <goals> <goal>install</goal> </goals> <postBuildHookScript>validate.groovy</postBuildHookScript> </configuration> <executions> <execution> <id>integration-test</id> <phase> integration-test</phase> <goals> <goal>install</goal> <goal>run</goal> </goals> </execution> </executions> </plugin>
projectDirectory 用来配置测试项目的目录,用户可以将测试项目的源码放在 src/it 下。 goals 表示在测试项目上要运行的 Maven 目标。( mvn install ) postBuildHookScript 表示测试项目构建完成后要运行的验证脚本。
以上配置将 maven-invoker-plugin 的两个目标 install 和 run 绑定到了待测试插件的 integration-test 生命周期阶段。 install 目标用来将当前待测试插件项目的构件安装到仓库中供测试项目使用。 run 目标会执行定义好的 mvn 命令构建测试项目并运行验证脚本。
16. maven-invoker-plugin 还有如下配置点:
1) debug(boolean) :是否在构建测试项目的时候开启 debug 输出。
2) settingsFile(File) :执行集成测试所使用的 settings.xml ,默认为本机环境的 settings.xml
3) localRepositoryPath(File) :执行集成测试所使用的本地仓库。
4) preBuildHookScript(String) :构建测试项目之前运行的脚本。
5) postBuildHookScript(String) :构建测试项目之后运行的脚本。
具体可以参考 http://maven.apache.org/plugins/maven-invoker-plugin/
发表评论
-
关于 Maven的传递依赖的理解
2012-09-30 09:50 13980今天又回顾了一下 《Maven in Action》的读书笔记 ... -
《Maven in Action》读后感
2012-02-23 23:48 2207今天终于读完了《Maven in Action》一书,真所谓书 ... -
第十八章 Archetype
2012-02-23 23:30 50741. Archetype 是 Maven ... -
第十六章 m2eclipse
2012-02-23 15:44 23731. m2eclipse ( http: ... -
第十五章 生成项目站点
2012-02-21 09:27 22841. Maven 社区提供了大量插件,能让用户 ... -
第十四章 灵活的构建
2012-02-20 16:21 18671. 通过 <propertie ... -
第十三章 版本管理
2012-02-20 15:57 21161. 版本管理( Version Manage ... -
第十二章 使用Maven构建Web应用
2012-02-15 18:38 60371. Web 项目的 POM ... -
第十一章 使用Hudson进行持续集成
2012-02-09 17:09 23081. 持续集成就是快速 且高频率 ... -
第十章 使用Maven进行测试
2012-02-05 22:17 214001. com.google.code. ... -
第九章 使用Nexus创建私服
2011-12-06 23:17 107891. Nexus 分为开源版和企业版,开源 ... -
第八章 聚合与继承
2011-12-06 09:55 20451. 为了能用一条命令来构建一个实际 ... -
第七章 生命周期和插件
2011-12-05 13:36 23011. Maven 的生命周期就是为了对所有的构 ... -
第六章 仓库
2011-12-03 18:44 24041. Maven 在一个工作站上的某个位置统一 ... -
第五章 坐标和依赖
2011-12-03 15:14 20791. Maven 定义了这样一组规则:世界上任 ... -
第四章 背景案例
2011-12-02 21:20 14171. 主要场景: 1) 用户访问注册页面 2) ... -
第三章 Maven 使用入门
2011-12-01 18:40 25451. 就像Make的Makefile, Ant的build. ... -
第二章 Maven的安装和配置
2011-12-01 10:01 62331. 设置JAVA_HOME, Path中加入%JAVA_H ... -
第一章 Maven 简介
2011-12-01 09:48 22861. Maven 是优秀的构建工 ...
相关推荐
第1章 maven简介1.1 何为maven1.1.1 何为构建1.1.2 maven是优秀的构建工具1.1.3 maven不仅仅是构建工具1.2 为什么...灵活的构建第15章 生成项目站点第16章 m2eclipse第17章 编写maven插件第18章 archetype
本书分成了三个部分:介绍性内容,第 I 部分 “Maven实战” ,和第 II 部分 “Maven参考”。介绍性内容包括了两章:...例如,第 II 部分 “Maven参考” 中的第 17 章编写插件一章通过 一些例子和表格解释如何编写插件。
针对需要编写Maven插件或自定义项目骨架的高级用户,介绍了如何开发Archeype和Maven插件。 #### 四、Maven实战的实际应用 1. **项目初始化**:通过使用Maven的Archetype功能,可以快速生成项目的基本结构,大大...
Maven2是Maven的第一个稳定版本,它极大地简化了项目的构建、依赖管理和文档生成过程。本教程将带你一步步了解并掌握Maven2的基础知识。 ### 一、Maven2的核心概念 1. **项目对象模型(Project Object Model,POM...
基于Maven插件的全局性重用 1.5. 一个“项目”的概念模型 1.6. Maven是Ant的另一种选择么? 1.7. 比较Maven和Ant 1.8. 总结 2. 安装和运行Maven 2.1. 验证你的Java安装 2.2. 下载Maven 2.3. 安装Maven ...
- **内容**: 如何编写自定义的Maven插件、创建Archetype模板等。 #### 书籍价值 - **全面覆盖**: 从Maven的基础知识到高级应用,本书提供了全方位的指导。 - **实战案例**: 通过具体示例帮助读者更好地理解和应用...
创建 Maven 插件的第一步是将其声明为插件类型。这通常在 `pom.xml` 文件中的 `<build><plugins>` 节下完成。 - **创建一个目标** 目标是 Maven 插件中的主要执行单位。每个目标都有一个特定的名称,并且可以在...
第十七章:Web服务开发 1. Web服务基础:理解SOAP、WSDL和UDDI等基本概念,以及Web服务的工作原理。 2. MyEclipse中的Web服务工具:学习如何在MyEclipse中创建、发布和消费Web服务。 3. JAX-WS(Java API for XML ...
### Maven命令详解 Maven是Java项目自动化构建工具的一个标准,它通过一组生命周期构建项目对象模型(POM),简化了构建过程。对于初学者来说,理解Maven的基本命令及其用法至关重要。 #### 1. `mvn -v` 用于显示...
第4章 HDFS 2 4.1. 简介 2 4.1.1. 概述 2 4.1.2. 组成架构 4 4.1.3. HDFS文件块大小 5 4.2. HDFS的shell操作 6 4.2.1. 基本语法 7 4.2.2. 参数大全 8 4.2.3. 常用命令实操 9 4.3. 通过Java实现HDFS操作及访问 14 ...
在本节"[SSH+Maven+Bootstrap视频教程]_第十七讲"中,我们将深入学习如何结合使用三种关键的开源技术:Spring、Struts2和Hibernate(SSH)框架,以及Maven项目管理和Bootstrap前端框架,以构建高效且具有现代用户...
该课程是北风品牌课程-《BF-TECH J2EE软件工程师就业课程》 第五阶段:项目实战一、开发基于SSH2+Maven+JeasyUI+MySQL技术的 【易买网电子商务交易平台】课程。 jQuery EasyUI简称jeasyui,也就叫easyui,是一组基于...
12. **第十二章:自定义插件与扩展** - Struts 2的插件体系,了解如何开发和使用自定义插件 - 插件的生命周期和加载机制 13. **第十三章:性能优化与调试** - 分析Struts 2的性能瓶颈 - 提升性能的方法,如缓存...