天天看点

maven插件编写与调试

    maven常见的插件有compile插件,deploy插件,jetty插件等等,这些插件有的是主动去执行,有的是在maven特定的生命周期中执行。我们需要在这些生命周期自动或者手动去执行一些嵌入的功能,比如生成辅助代码,一些环境的配置之类的,最好就是用插件去完成。

validate
compile 
test 
package
integration-test 
verify 
install
deploy
           

    1、新建一个maven的simple project。

    2、在maven的pom中加入一个maven-plugin-api依赖以及maven-plugin-plugin插件,并将对应的package类型改为maven-plugin

<packaging>maven-plugin</packaging>
...
<dependencies>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-plugin-api</artifactId>
      <version>2.0</version>
    </dependency>
    <dependency>
      <groupId>org.codehaus.plexus</groupId>
      <artifactId>plexus-utils</artifactId>
      <version>1.1</version>
    </dependency>

  </dependencies>
...
<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-plugin-plugin</artifactId>
        <version>3.0</version>
        <executions>
        </executions>
        <configuration>
          <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
        </configuration>
</plugin>
           

3、编写一个类继承AbstractMojo并且实现execute方法,并在类注释中用@goal标注插件执行的单元

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;

/**
 * @goal hello
 * @phase process-sources
 */
public class MojoExample extends AbstractMojo {</span>

    public void execute() throws MojoExecutionException, MojoFailureException {
        getLog().info("Hello world~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    }
    
}
           

打包后,用mvn install到本地仓库,然后在项目中就可以引入对应的plugin

<plugin>
        <groupId>com.xxx</groupId>
        <artifactId>plugintest</artifactId>
      </plugin>
执行:mvn groupID:artifactID:version:goal 
           

    4、最后说一下调试吧,我用的是intellij,在intellij中开发这个项目的时候,将插件加入某个项目作为其module,然后在pom文件中引入插件,并且在intellij的Terminal中用

mvnDebug groupID:artifactID:version:goal 来启动插件,并且在插件的execute方法中打上断点。这个是maven的远程调试,我们必须在intelli中用remote来连接过去。新增一个执行,然后端口设置为8000,然后启动即可。

    github上有很多现成的插件的源码,随便找一个去研究研究,模仿一下就行了,最重要的是明白自己需要做什么。

继续阅读