maven插件(2)-plugin編寫

1 新建java普通的jar項目

2 添加maven-plugin的pom依賴

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-plugin-api</artifactId>
        <version>3.5.2</version>
    </dependency>

    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-core</artifactId>
        <version>3.5.2</version>
    </dependency>

    <dependency>
        <groupId>org.apache.maven.plugin-tools</groupId>
        <artifactId>maven-plugin-annotations</artifactId>
        <version>3.5.2</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.28</version>
    </dependency>
</dependencies>

3 編寫插件代碼

import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;
import java.util.List;

@Mojo(name="compile", defaultPhase= LifecyclePhase.COMPILE)
public class MavenPluginCompileMojo extends AbstractMojo {

    @Parameter
    private String describe;

    @Parameter
    private List<String> extentParams;

    @Parameter
    private String path;

    @Parameter(defaultValue="${project}", readonly=true, required=true)
    private MavenProject project;

    @Parameter(defaultValue="${session}", readonly=true, required=true)
    private MavenSession session;

    /**
     * POM屬性
     * 項目構建輸出目錄: 默認target/
     */
    @Parameter(defaultValue="${project.build.directory}", required=true)
    private String buildDirectory;

    /**
     * POM屬性
     * 項目主源碼目錄: 默認 src/mian/java
     */
    @Parameter(defaultValue="${project.build.sourceDirectory}", readonly=true)
    private String sourceDirectory;

    /**
     * POM屬性
     * 項目代碼編譯輸出目錄: 默認 target/classes/
     */
    @Parameter(defaultValue="${project.build.outputDirectory}", readonly=true)
    private String outputDirectory;

    /**
     * POM屬性
     * 打包輸出項目名: 默認 ${project.artifactId}-${project.version}
     */
    @Parameter(defaultValue="${project.build.finalName}", readonly=true)
    private String finalName;

    /**
     * POM屬性
     */
    @Parameter(defaultValue="${project.build.sourceEncoding}",readonly = true)
    private String resourceEncoding;

    /**
     * POM屬性
     */
    @Parameter(defaultValue="${project.groupId}", readonly=true)
    private String groupId;

    /**
     * POM屬性
     */
    @Parameter(defaultValue="${project.artifactId}", readonly=true)
    private String artifactId;

    /**
     * POM屬性
     * 項目版本
     */
    @Parameter(defaultValue = "${project.version}",readonly = true)
    private String projectVersion;

    /**
     * 內置屬性
     * 項目根目錄
     */
    @Parameter(defaultValue = "${basedir}",readonly = true)
    private String projectBaseDir;

    /**
     *自定義屬性
     *
     *<properties>
     *   <jar.useDefault>true</jar.useDefault>
     *</properties>
     *
     */
    @Parameter(property="jar.useDefault", defaultValue="false")
    private boolean useDefault;

    /**
     * java 系統屬性
     *
     * 備註:mvn help:system
     */
    @Parameter(defaultValue = "${user.home}",readonly = true)
    private String javaUserHome;

    /**
     * java 系統屬性
     *
     * 備註:mvn help:system
     */
    @Parameter(defaultValue = "${java.home}",readonly = true)
    private String javaHome;

    /**
     * 環境變量
     *
     * 備註:mvn help:system
     */
    @Parameter(defaultValue = "${env.JAVA_HOME}",readonly = true)
    private String envJavaHome;

    @Parameter(defaultValue = "${env.MAVEN_HOME}",readonly = true)
    private String envMavenHome;

    /**
     * 執行入口
     * 調試:mvn Debug cn.chy:mavenplugindemo:2.0-SNAPSHOT:compile
     * @throws MojoExecutionException
     * @throws MojoFailureException
     */
    public void execute() throws MojoExecutionException, MojoFailureException {
        getLog().info("MavenPluginCompileMojo | compile");

        getLog().info("=======java系統屬性=========>");
        getLog().info("javaUserHome" + javaUserHome);
        getLog().info("javaHome:" + javaHome);

        getLog().info("=======環境變量=========>");
        getLog().info("JAVA_HOME" + envJavaHome);
        getLog().info("MAVEN_HOME:" + envMavenHome);

        getLog().info("=======maven POM屬性=========>");
        getLog().info("buildDirectory:" + buildDirectory);
        getLog().info("sourceDirectory:" + sourceDirectory);
        getLog().info("outputDirectory:" + outputDirectory);
        getLog().info("resourceEncoding:" + resourceEncoding);
        getLog().info("finalName:" + finalName);
        getLog().info("groupId:" + groupId);
        getLog().info("artifactId:" + artifactId);

        getLog().info("======maven 內置屬性==========>");
        getLog().info("projectBaseDir:" + projectBaseDir);
        getLog().info("projectVersion:" + projectVersion);

        getLog().info("======maven 自定義屬性==========>");
        getLog().info("useDefault:" + useDefault);

        getLog().info("======maven plugin 參數==========>");
        getLog().info("describe:" + describe);
        if (extentParams != null) {
            for (String string : extentParams) {
                getLog().info("extentParams:" + string);
            }
        }
        getLog().info("path:" + path);
    }
}

4 插件打包上傳maven倉庫

如果打包過程出現錯誤:
Failed to execute goal org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor (default-descriptor) on project xjar-maven-plugin: Execution default-descriptor of goal org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor failed: 1612 -> [Help 1]
解決方法:
可能由於沒有指定maven-plugin-plugin版本,所以默認是3.2,支持jdk 1.7
升級maven-plugin-plugin版本3.5,支持jdk1.8

5 新建test項目引用maven插件

<build>
    <plugins>
        <plugin>
            <groupId>cn.chy</groupId>
            <artifactId>mavenplugindemo</artifactId>
            <version>2.0-SNAPSHOT</version>
            <!-- 全局默認參數 -->
            <configuration>
                <describe>this is maven plugin demo</describe>
                <extentParams>
                    <manyParam>1</manyParam>
                    <manyParam>2</manyParam>
                </extentParams>
                <path>${basedir}/src/main/java</path>
            </configuration>
            <executions>
                <execution>
                    <!-- 有多個execution 必須有id  -->
                    <id>compileid</id>
                    <!-- 編譯階段執行 -->
                    <phase>compile</phase>
                    <goals>
                        <goal>compile</goal>
                    </goals>
                    <!-- 局部參數 會覆蓋全局參數 -->
                    <configuration>
                        <describe>this is maven plugin compile demo</describe>
                        <extentParams>
                            <manyParam>3</manyParam>
                            <manyParam>4</manyParam>
                        </extentParams>
                    </configuration>
                </execution>                
            </executions>
        </plugin>
    </plugins>
</build>

6 test項目執行maven compile

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章