zoukankan      html  css  js  c++  java
  • 13) Developing Java Plugins

    官方指导 http://maven.apache.org/guides/plugin/guide-java-plugin-development.html

                http://maven.apache.org/plugin-developers/

    插件命名公约和 Apache Maven 商标

    maven-<someplugin>-plugin 为官方的命名模式(Maven 的什么插件)

    <yourplugin>-maven-plugin 非官方的插件命名模式(你的Maven插件)

    1.根据骨架生成项目

    mvn archetype:generate -DgroupId=cn.zno.plugin -DartifactId=hello-maven-plugin -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-plugin

    前两个参数是设置自己的项目信息

    后两个参数是指定具体的原型

    点击查看所有参数

    2. 遭遇问题

    Plugin execution not covered by lifecycle configuration: org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor (execution: default-descriptor, phase: generate-resources)

    解决办法:安装 e2m 插件。点击查看

     3.新建自己的项目

    E:.
    │  pom.xml
    │
    └─src
        └─main
            └─java
                └─cn
                    └─zno
                        └─plugin
                                GreetingMojo.java

    pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>cn.zno.plugin</groupId>
      <artifactId>hello-maven-plugin</artifactId>
      
      <version>1.0</version>
      <packaging>maven-plugin</packaging>
    
      <name>hello-maven-plugin Maven Plugin</name>
    
      <!-- FIXME change it to the project's website -->
      <url>http://maven.apache.org</url>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
    
      <dependencies>
        <dependency>
          <groupId>org.apache.maven</groupId>
          <artifactId>maven-plugin-api</artifactId>
          <version>2.0</version>
        </dependency>
        <dependency>
          <groupId>org.apache.maven.plugin-tools</groupId>
          <artifactId>maven-plugin-annotations</artifactId>
          <version>3.2</version>
          <scope>provided</scope>
        </dependency>
      </dependencies>
    
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-plugin-plugin</artifactId>
            <version>3.2</version>
            <configuration>
              <goalPrefix>hello</goalPrefix>
              <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
            </configuration>
            <executions>
              <execution>
                <id>mojo-descriptor</id>
                <goals>
                  <goal>descriptor</goal>
                </goals>
              </execution>
              <execution>
                <id>help-goal</id>
                <goals>
                  <goal>helpmojo</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </project>
    GreetingMojo.java
    package cn.zno.plugin;
    
    import org.apache.maven.plugin.AbstractMojo;
    import org.apache.maven.plugin.MojoExecutionException;
    import org.apache.maven.plugins.annotations.Mojo;
     
    /**
     * Says "Hi" to the user.
     *
     */
    @Mojo( name = "sayhi")
    public class GreetingMojo extends AbstractMojo
    {
        public void execute() throws MojoExecutionException
        {
            getLog().info( "Hello, world." );
        }
    }

    4.生成插件

    进入项目所在目录执行 mvn install

    E:eworkspacehello-maven-plugin>mvn install
    [INFO] Scanning for projects...
    [INFO]
    [INFO] ------------------------------------------------------------------------
    [INFO] Building hello-maven-plugin Maven Plugin 1.0
    [INFO] ------------------------------------------------------------------------
    [INFO]
    [INFO] --- maven-plugin-plugin:3.2:helpmojo (help-goal) @ hello-maven-plugin ---
    [INFO] Using 'UTF-8' encoding to read mojo metadata.
    [INFO] Applying mojo extractor for language: java-annotations
    [INFO] Mojo extractor for language: java-annotations found 2 mojo descriptors.
    [INFO] Applying mojo extractor for language: java
    [INFO] Mojo extractor for language: java found 0 mojo descriptors.
    [INFO] Applying mojo extractor for language: bsh
    [INFO] Mojo extractor for language: bsh found 0 mojo descriptors.
    [INFO]
    [INFO] --- maven-plugin-plugin:3.2:descriptor (default-descriptor) @ hello-maven-plugin ---
    [INFO] Using 'UTF-8' encoding to read mojo metadata.
    [INFO] Applying mojo extractor for language: java-annotations
    [INFO] Mojo extractor for language: java-annotations found 2 mojo descriptors.
    [INFO] Applying mojo extractor for language: java
    [INFO] Mojo extractor for language: java found 0 mojo descriptors.
    [INFO] Applying mojo extractor for language: bsh
    [INFO] Mojo extractor for language: bsh found 0 mojo descriptors.
    [INFO]
    [INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ hello-maven-plugin ---
    [debug] execute contextualize
    [INFO] Using 'UTF-8' encoding to copy filtered resources.
    [INFO] skip non existing resourceDirectory E:eworkspacehello-maven-pluginsrcmain
    esources
    [INFO]
    [INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ hello-maven-plugin ---
    [INFO] Compiling 1 source file to E:eworkspacehello-maven-plugin	argetclasses
    [INFO]
    [INFO] --- maven-plugin-plugin:3.2:descriptor (mojo-descriptor) @ hello-maven-plugin ---
    [INFO] Using 'UTF-8' encoding to read mojo metadata.
    [INFO] Applying mojo extractor for language: java-annotations
    [INFO] Mojo extractor for language: java-annotations found 2 mojo descriptors.
    [INFO] Applying mojo extractor for language: java
    [INFO] Mojo extractor for language: java found 0 mojo descriptors.
    [INFO] Applying mojo extractor for language: bsh
    [INFO] Mojo extractor for language: bsh found 0 mojo descriptors.
    [INFO]
    [INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ hello-maven-plugin ---
    [debug] execute contextualize
    [INFO] Using 'UTF-8' encoding to copy filtered resources.
    [INFO] skip non existing resourceDirectory E:eworkspacehello-maven-pluginsrc	est
    esources
    [INFO]
    [INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ hello-maven-plugin ---
    [INFO] No sources to compile
    [INFO]
    [INFO] --- maven-surefire-plugin:2.10:test (default-test) @ hello-maven-plugin ---
    [INFO] Surefire report directory: E:eworkspacehello-maven-plugin	argetsurefire-reports
    
    -------------------------------------------------------
     T E S T S
    -------------------------------------------------------
    
    Results :
    
    Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
    
    [INFO]
    [INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ hello-maven-plugin ---
    [INFO] Building jar: E:eworkspacehello-maven-plugin	argethello-maven-plugin-1.0.jar
    [INFO]
    [INFO] --- maven-plugin-plugin:3.2:addPluginArtifactMetadata (default-addPluginArtifactMetadata) @ hello-maven-plugin --
    -
    [INFO]
    [INFO] --- maven-install-plugin:2.3.1:install (default-install) @ hello-maven-plugin ---
    [INFO] Installing E:eworkspacehello-maven-plugin	argethello-maven-plugin-1.0.jar to C:Documents and SettingsAdmin
    istrator.m2
    epositorycnznopluginhello-maven-plugin1.0hello-maven-plugin-1.0.jar
    [INFO] Installing E:eworkspacehello-maven-pluginpom.xml to C:Documents and SettingsAdministrator.m2
    epositorycn
    znopluginhello-maven-plugin1.0hello-maven-plugin-1.0.pom
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 1.984s
    [INFO] Finished at: Sun Sep 06 19:20:58 CST 2015
    [INFO] Final Memory: 14M/34M
    [INFO] ------------------------------------------------------------------------

    查看META-INFmavenplugin.xml

    <?xml version="1.0" encoding="UTF-8"?>
    
    <!-- Generated by maven-plugin-tools 3.2 on 2015-09-06 -->
    
    <plugin>
      <name>hello-maven-plugin Maven Plugin</name>
      <description></description>
      <groupId>cn.zno.plugin</groupId>
      <artifactId>hello-maven-plugin</artifactId>
      <version>1.0</version>
      <goalPrefix>hello</goalPrefix>
      <isolatedRealm>false</isolatedRealm>
      <inheritedByDefault>true</inheritedByDefault>
      <mojos>
        <mojo>
          <goal>sayhi</goal>
          <description>Says &quot;Hi&quot; to the user.</description>
          <requiresDirectInvocation>false</requiresDirectInvocation>
          <requiresProject>true</requiresProject>
          <requiresReports>false</requiresReports>
          <aggregator>false</aggregator>
          <requiresOnline>false</requiresOnline>
          <inheritedByDefault>true</inheritedByDefault>
          <implementation>cn.zno.plugin.GreetingMojo</implementation>
          <language>java</language>
          <instantiationStrategy>per-lookup</instantiationStrategy>
          <executionStrategy>once-per-session</executionStrategy>
          <threadSafe>false</threadSafe>
          <parameters/>
        </mojo>
        <mojo>
          <goal>help</goal>
          <description>Display help information on hello-maven-plugin.&lt;br/&gt;
    Call &lt;code&gt;mvn hello:help -Ddetail=true -Dgoal=&amp;lt;goal-name&amp;gt;&lt;/code&gt; to display parameter details.</description>
          <requiresDirectInvocation>false</requiresDirectInvocation>
          <requiresProject>false</requiresProject>
          <requiresReports>false</requiresReports>
          <aggregator>false</aggregator>
          <requiresOnline>false</requiresOnline>
          <inheritedByDefault>true</inheritedByDefault>
          <implementation>cn.zno.plugin.HelpMojo</implementation>
          <language>java</language>
          <instantiationStrategy>per-lookup</instantiationStrategy>
          <executionStrategy>once-per-session</executionStrategy>
          <threadSafe>true</threadSafe>
          <parameters>
            <parameter>
              <name>detail</name>
              <type>boolean</type>
              <required>false</required>
              <editable>true</editable>
              <description>If &lt;code&gt;true&lt;/code&gt;, display all settable properties for each goal.</description>
            </parameter>
            <parameter>
              <name>goal</name>
              <type>java.lang.String</type>
              <required>false</required>
              <editable>true</editable>
              <description>The name of the goal for which to show help. If unspecified, all goals will be displayed.</description>
            </parameter>
            <parameter>
              <name>indentSize</name>
              <type>int</type>
              <required>false</required>
              <editable>true</editable>
              <description>The number of spaces per indentation level, should be positive.</description>
            </parameter>
            <parameter>
              <name>lineLength</name>
              <type>int</type>
              <required>false</required>
              <editable>true</editable>
              <description>The maximum length of a display line, should be positive.</description>
            </parameter>
          </parameters>
          <configuration>
            <detail implementation="boolean" default-value="false">${detail}</detail>
            <goal implementation="java.lang.String">${goal}</goal>
            <indentSize implementation="int" default-value="2">${indentSize}</indentSize>
            <lineLength implementation="int" default-value="80">${lineLength}</lineLength>
          </configuration>
        </mojo>
      </mojos>
      <dependencies>
        <dependency>
          <groupId>org.apache.maven</groupId>
          <artifactId>maven-plugin-api</artifactId>
          <type>jar</type>
          <version>2.0</version>
        </dependency>
      </dependencies>
    </plugin>

    5. 新建插件测试项目

    pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>cn.zno</groupId>
      <artifactId>test-hello-maven-plugin</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      
      <build>
        <plugins>
          <plugin>
            <groupId>cn.zno.plugin</groupId>
            <artifactId>hello-maven-plugin</artifactId>
            <version>1.0</version>
          </plugin>
        </plugins>
      </build>
    </project>

    6. 测试

    进入到测试项目根目录执行 mvn hello:sayhi

    E:eworkspace	est-hello-maven-plugin>mvn hello:sayhi
    [INFO] Scanning for projects...
    [INFO]
    [INFO] ------------------------------------------------------------------------
    [INFO] Building test-hello-maven-plugin 0.0.1-SNAPSHOT
    [INFO] ------------------------------------------------------------------------
    [INFO]
    [INFO] --- hello-maven-plugin:1.0:sayhi (default-cli) @ test-hello-maven-plugin ---
    [INFO] Hello, world.
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 0.203s
    [INFO] Finished at: Sun Sep 06 19:26:04 CST 2015
    [INFO] Final Memory: 4M/15M
    [INFO] ------------------------------------------------------------------------

    7.设置参数

    修改GreetingMojo.java 文件

    package cn.zno.plugin;
    
    import org.apache.maven.plugin.AbstractMojo;
    import org.apache.maven.plugin.MojoExecutionException;
    import org.apache.maven.plugins.annotations.Mojo;
    import org.apache.maven.plugins.annotations.Parameter;
    
    /**
     * Says "Hi" to the user.
     *
     */
    @Mojo(name = "sayhi")
    public class GreetingMojo extends AbstractMojo {
        
        @Parameter( property = "sayhi.greeting", defaultValue = "Hello World!" )
        private String greeting;
        
        public void execute() throws MojoExecutionException {
            getLog().info(greeting);
        }
    }

    修改插件测试项目

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>cn.zno</groupId>
        <artifactId>test-hello-maven-plugin</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>cn.zno.plugin</groupId>
                    <artifactId>hello-maven-plugin</artifactId>
                    <version>1.0</version>
                    <configuration>
                        <greeting>tttttttttttttta</greeting>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>

    执行mvn hello:sayhi

    E:eworkspace	est-hello-maven-plugin>mvn hello:sayhi
    [INFO] Scanning for projects...
    [INFO]
    [INFO] ------------------------------------------------------------------------
    [INFO] Building test-hello-maven-plugin 0.0.1-SNAPSHOT
    [INFO] ------------------------------------------------------------------------
    [INFO]
    [INFO] --- hello-maven-plugin:1.0:sayhi (default-cli) @ test-hello-maven-plugin ---
    [INFO] tttttttttttttta
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 0.219s
    [INFO] Finished at: Sun Sep 06 19:34:29 CST 2015
    [INFO] Final Memory: 4M/15M
    [INFO] ------------------------------------------------------------------------

    8.通过命令行动态设置参数

    只需要修改插件测试项目配置文件

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>cn.zno</groupId>
        <artifactId>test-hello-maven-plugin</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>cn.zno.plugin</groupId>
                    <artifactId>hello-maven-plugin</artifactId>
                    <version>1.0</version>
                    <configuration>
                        <greeting>${greeting}</greeting>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>

    测试执行命令 mvn hello:sayhi -Dgreeting=22222222222

    E:eworkspace	est-hello-maven-plugin>mvn hello:sayhi -Dgreeting=22222222222
    [INFO] Scanning for projects...
    [INFO]
    [INFO] ------------------------------------------------------------------------
    [INFO] Building test-hello-maven-plugin 0.0.1-SNAPSHOT
    [INFO] ------------------------------------------------------------------------
    [INFO]
    [INFO] --- hello-maven-plugin:1.0:sayhi (default-cli) @ test-hello-maven-plugin ---
    [INFO] 22222222222
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 0.219s
    [INFO] Finished at: Sun Sep 06 19:41:59 CST 2015
    [INFO] Final Memory: 4M/15M
    [INFO] ------------------------------------------------------------------------

     9.备注

    [ERROR] No plugin found for prefix 'jetty' in the current project and in the plugin groups [org.apache.maven.plugins, or
    g.codehaus.mojo] available from the repositories [local (C:Documents and SettingsAdministrator.m2 epository), centra
    l (http://repo.maven.apache.org/maven2)] -> [Help 1]

    执行插件的命令格式

    You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>.

    1. 在项目pom.xml 文件中配置或者

    <build>
        <plugins>
          <plugin>
            <groupId>cn.zno.plugin</groupId>
            <artifactId>hello-maven-plugin</artifactId>
            <version>1.0</version>
          </plugin>
        </plugins>
      </build>

    2. 在maven 的 settings.xml 文件中配置

      <pluginGroups>
        <pluginGroup>cn.zno.plugin</pluginGroup>
      </pluginGroups>
  • 相关阅读:
    洛谷P2522 [HAOI2011]Problem b(莫比乌斯反演)
    洛谷P3327 [SDOI2015]约数个数和(莫比乌斯反演)
    Informatica PowerCenter 常用转换组件一览表
    Informatica_(3)组件
    Informatica_(2)第一个例子
    Informatica_(1)安装
    InformaticaPowerCenter调用存储过程
    Informatica 9.5.1 安装配置
    Linux字符集的查看及修改
    Redis-3.2.9集群配置(redis cluster)
  • 原文地址:https://www.cnblogs.com/zno2/p/4786635.html
Copyright © 2011-2022 走看看