如何編寫maven plugin(二) 註入 – JAVA編程語言程序開發技術文章

Mojo是一個很簡單的Java Bean模式的類,你會發現Mojo所繼承的AbstractMojo裡面之後非常少的方法。那我們需要在Mojo.execute裡面獲取當前運行中的上下文如何處理呢?答案是註入,就是跟spring ioc差不多的註入方式。
 
    常用的註入主要有兩種,第一種是xml配置中的額外設置。比如說我們有這麼一個plugin的配置
1
<plugin>
2
    <artifactId>maven-eclipse-plugin</artifactId>
3
    <configuration>
4
        <downloadSources>true</downloadSources>
5
    </configuration>
6
</plugin>
所有寫在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這個標註,可以獲得一些基本的組件實例

發佈留言