天天看點

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上有很多現成的插件的源碼,随便找一個去研究研究,模仿一下就行了,最重要的是明白自己需要做什麼。

繼續閱讀