【转载】如何编写maven plugin (一) 基础

    当maven内置的功能不能知足需求的时候怎么办?那只能给它写插件了。 java

    网络上不少maven的文章,但基本不多谈及如何给它写插件,即便你搜索maven plugin,也只是给你返回一堆如何使用maven插件的文章。但愿这边文章能给一些maven使用者带来帮助。我在这里先假设你已经懂得使用maven,我不会贴出完整的pom.xml文件 apache

      首先,你须要建立一个maven项目,插件是一种特殊的maven项目
而后修改pom.xml,将packaging改成maven-plugin api

<packaging>maven-plugin</packaging>

经过properties定义maven的版本 网络

<properties>
	<maven.version>2.2.1</maven.version>
</properties>

    maven3已经出了好久,而且兼容maven2,可是我这里编写插件使用的是maven2,能够同时在maven2和maven3下使用,不过其实这个缘由并不重要,真正的缘由是由于maven3的代码实在太烂了,最初的时候我用maven3的api lib来写,发现里面不少代码根本没有注释,并且不少代码已经废弃,可是并无明确说明究竟用什么方法代替。最后我使用了maven2中被maven3废弃的api来完成个人功能,跑的挺好的,就是有时可能会有一些使用准备废弃的api的提醒而已。 eclipse

接着添加依赖 maven

<dependencies>
	<dependency>
		<groupId>org.apache.maven</groupId>
		<artifactId>maven-plugin-api</artifactId>
		<version>${maven.version}</version>
	</dependency>
	<dependency>
		<groupId>org.apache.maven</groupId>
		<artifactId>maven-core</artifactId>
		<version>${maven.version}</version>
	</dependency>
</dependencies>

而后开始建立Mojo类,maven插件里面每个具体的功能都是一个Mojo
好比说eclipse:clean和eclipse:eclipse就是两个Mojo 测试

/**
 * @goal helloWorld
 */
public class HelloWorldMojo extends AbstractMojo {
    public void execute() throws MojoExecutionException
    {
        getLog().info("Hello, world!");
    }
}

首先继承AbstractMojo,而且实现execute()方法,这个就是每次调用进入的地方
而后须要在类的Javadoc上定义,这是一个annotation出来以前经常使用的定义方法(或许将来maven会将它改为annotation,那就能提供编译校验和IDE校验)。咱们必须定义@goal,表明运行目标,简单来讲就是eclipse:clean中的clean
Mojo写在哪一个package底下都是能够的 ui

这样,咱们就完成了一个简单的maven plugin,而后咱们须要一个简单的测试来肯定他正确运行
先经过maven install将它安装到本地仓库 spa

而后打开任意maven的项目(好比说咱们原来已经在用maven的项目),在pom.xml增长一个plugin .net

<build>
    <plugins>
      <plugin>
        <groupId>xxx</groupId>
        <artifactId>xxx</artifactId>
        <version>xxx</version>
        <executions>
          <execution>
            <phase>compile</phase>
            <goals>
              <goal>helloWorld</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

须要留意的是phase部分,咱们将这个plugin绑定到compile这个周期
而后咱们运行mvn compile,就能成功看见Hello, world!输出
(固然你也能够直接经过命令行运行,须要带上完整的groupId和artifactId才能调用)

http://blog.csdn.net/bluishglc/article/details/6632280  

http://fableking.iteye.com/blog/1549466

相关文章
相关标签/搜索