如何编写maven plugin(二) 注入

2014-11-24 07:11:46 · 作者: · 浏览: 0
Mojo是一个很简单的 Java Bean模式的类,你会发现Mojo所继承的AbstractMojo里面之后非常少的方法。那我们需要在Mojo.execute里面获取当前运行中的上下文如何处理呢?答案是注入,就是跟spring ioc差不多的注入方式。

常用的注入主要有两种,第一种是xml配置中的额外设置。比如说我们有这么一个plugin的配置
1

2
maven-eclipse-plugin
3

4
true
5

6

所有写在configuration里面的属性都可以注入到Mojo中,比如说以下代码
1
/**
2
* @parameter
3
*/
4
private boolean downloadSources;
就可以通过downloadSources变量获得配置中的值
值得注意的是,这里是不用生成完整的JavaBean模式的get/set的,并且private是有效的

javadoc里面还可以加入其他属性,比如说
1
/**
2
* @parameter default-value="true"
3
* @readonly
4
*/
5
private boolean downloadSources;
就是默认为true,并且不能通过配置修改(当然我们这里肯定不会有这样的需求)
更多的javadoc可以参看官方文档中的说明

第二种注入的数据就是上下文,跟HttpServlet.getServletContext这种写法不一样,如果我们需要Mojo运行期的上下文,也是通过注入获得的
01
/**
02
* @parameter expression="${project}"
03
* @readonly
04
*/
05
private MavenProject project;
06

07
/**
08
* @component
09
* @readonly
10
*/
11
private ArtifactFactory artifactFactory;
例如这里我们就能获得ArtifactFactory和MavenProject
需要注意的是这里可能有两种方法,第一种跟xml配置获得的方法差不多,通过expression指定名字
实际上,你在xml里面,也可以通过${project}获得相应的东西进行一些简单的操作(当然xml里面只能文本描述,这里是一个类)

另外一种就是使用@component这个标注,可以获得一些基本的 组件实例