如何编写maven plugin(二) 注入

    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这个标注,可以获得一些基本的组件实例

PS:

   通过传入参数可以实现多种灵活的配置。

   此参数支持的种类很多:  
   boolean(包括 boolean和Boolean)
   int(包括Integer,long, Long, short, Short, byte, Byte)
   float(包括Float, double, Double)
   String (包括StringBuffer, char, Character)
   Date(格式为 yyyy-MM0dd HH:mm:ss S a 或者 yyyy-MM-ddHH:mm:ssa)
   File(文件路径)
   URL(url地址)
   Collection
   Map
   Properties
   
   实际上一个maven插件大体就是这个样子的。当然我们可以通过我们的其它代码写入我们的业务逻辑。

4.实际上包括mojo还有mojo中的成员变量都是通过注解方式配置的
   那么下面简单说说mojo的主要的注解吧
   goal:注解形式:@goal <goalName>
   用户在命令行下直接调用插件的目标goal,或者在项目的pom文件中通过配置调用这个goal。
   phase:注解形式:@phase <phaseName>
   绑定这个mojo到标准构建生命周期里对应的阶段.
   @requiresProject <true | false>
   这个注解的意思是这个Mojo是否再一个 Maven项目中运行,我们上面的例子是直接在mvn仓库中运行这个插件。所以设置为false.如果没有进行过设置则默认是为true的
   @requiresonline <true|false>
   是否需要Maven必须在线状态.

   对于一个mojo里的变量参数,也有一些常用的注解:
   @parameter expression=”${aSystemProperty}” default-value=”${anExpression}”
   对参数指定一个计算表达式、在mojo构建时将计算结果注入到此变量中,同时也可以给定一个默认值。这个参数值也可以在pom文件中予以配置。
   @readonly
   表示改Mojo参数是只读的,如果使用了注解。用户就无法对其进行配置
   @required
   表示该参数是必须的。如果使用了注解。又没有对其进行配置。则Maven就会报错

实际上Maven插件使用起来还是很灵活的。我们可以对其写一些自动化的测试工具。它提供的log也可以在插件运行不正常的时候快速的排查到它的问题。
   

转载于:https://my.oschina.net/aiguozhe/blog/39984

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值