Mojo是一个很简单的Java Bean模式的类,你会发现Mojo所继承的AbstractMojo里面之后非常少的方法。那我们需要在Mojo.execute里面获取当前运行中的上下文如何处理呢?答案是注入,就是跟spring ioc差不多的注入方式。
常用的注入主要有两种,第一种是xml配置中的额外设置
比如说我们有这么一个plugin的配置
<plugin> <artifactId>maven-eclipse-plugin</artifactId> <configuration> <downloadSources>true</downloadSources> </configuration> </plugin>
所有写在configuration里面的属性都可以注入到Mojo中,比如说以下代码
/** * @parameter */ private boolean downloadSources;
就可以通过downloadSources变量获得配置中的值
值得注意的是,这里是不用生成完整的JavaBean模式的get/set的,并且private是有效的
javadoc里面还可以加入其他属性,比如说
/** * @parameter default-value="true" * @readonly */ private boolean downloadSources;
就是默认为true,并且不能通过配置修改(当然我们这里肯定不会有这样的需求)
更多的javadoc可以参看官方文档中的说明
第二种注入的数据就是上下文,跟HttpServlet.getServletContext这种写法不一样,如果我们需要Mojo运行期的上下文,也是通过注入获得的
/**
* @parameter expression="${project}"
* @readonly
*/
private MavenProject project;
/**
* @component
* @readonly
*/
private ArtifactFactory artifactFactory;例如这里我们就能获得ArtifactFactory和MavenProject
需要注意的是这里可能有两种方法,第一种跟xml配置获得的方法差不多,通过expression指定名字
实际上,你在xml里面,也可以通过${project}获得相应的东西进行一些简单的操作(当然xml里面只能文本描述,这里是一个类)
另外一种就是使用@component这个标注,可以获得一些基本的组件实例
- 如何编写maven plugin(一) 基础
- 如何编写maven plugin(二) 注入
- 如何编写maven plugin(三) 测试