关于java:三分钟快速掌握-maven插件

40次阅读

共计 6122 个字符,预计需要花费 16 分钟才能阅读完成。

老铁昨天下午问我什么时候讲讲 Maven 插件:

于是老田搞到大半夜终于写了一篇 maven 的插件,明天分享给大家。

想进一步详聊了请加我微信 tj20120622,进群和大家一起聊技术。

Maven 是一个执行插件的框架,每一个工作实际上是由插件实现的。那么咱们明天就来聊聊 Maven 插件。

什么是 Maven 插件?

Maven 实际上只是 Maven 插件汇合的外围框架。换句话说,插件是执行大部分实际操作的中央。

插件用于:

  • 创立 jar 文件,
  • 创立 war 文件,
  • 编译代码,
  • 单元测试代码,
  • 创立我的项目文档等。

插件是 Maven 的外围性能,它容许在多个我的项目中重用通用的构建逻辑。他们通过在我的项目形容(我的项目对象模型(POM))的上下文中执行“操作”(即创立 WAR 文件或编译单元测试)来实现此目标。能够通过一组惟一的参数来自定义插件的行为,这些参数通过每个插件指标(或 Mojo)的形容公开。

一个插件通常提供了一组指标,可应用以下语法来执行:

`mvn [plugin-name]:[goal-name]
`

例如:一个 Java 我的项目能够应用 Maven 编译器插件来编译指标,通过运行以下命令编译

`mvn compiler:compile
`

插件有哪些类型

Maven 提供以下两种类型插件:

以下是一些常见的插件列表:

例如

咱们应用 maven-antrun-plugin 插件在例子中来在控制台打印数据。当初在 C:MVNproject 文件夹 创立一个 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/m…d”>
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
   <plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-antrun-plugin</artifactId>
   <version>1.1</version>
   <executions>
      <execution>
         <id>id.clean</id>
         <phase>clean</phase>
         <goals>
            <goal>run</goal>
         </goals>
         <configuration>
            <tasks>
               <echo>clean phase</echo>
            </tasks>
         </configuration>
      </execution>     
   </executions>
   </plugin>
</plugins>
</build>
</project>
`

接下来,关上命令终端跳转到 pom.xml 所在的目录,并执行上面的 mvn 命令。

`mvn clean
`

Maven 将开始解决并显示 clean 生命周期的 clean 阶段。

`[INFO] Scanning for projects…
[INFO] ——————————————————————
[INFO] Building Unnamed – com.companyname.projectgroup:project:jar:1.0
[INFO]    task-segment: [post-clean]
[INFO] ——————————————————————
[INFO] [clean:clean {execution: default-clean}]
[INFO] [antrun:run {execution: id.clean}]
[INFO] Executing tasks [echo] clean phase
[INFO] Executed tasks
[INFO] ——————————————————————
[INFO] BUILD SUCCESSFUL
[INFO] ——————————————————————
[INFO] Total time: < 1 second
[INFO] Finished at: Sat Jul 07 13:38:59 IST 2020
[INFO] Final Memory: 4M/44M
[INFO] ——–
`

下面的例子展现了以下要害概念:

  • 插件是在 pom.xml 中应用 plugins 元素定义的。
  • 每个插件能够有多个指标。
  • 你能够定义阶段,插件会应用它的 phase 元素开始解决。咱们曾经应用了 clean 阶段。
  • 你能够通过绑定到插件的指标的形式来配置要执行的工作。咱们曾经绑定了 echo 工作到 maven-antrun-plugin 的 run 指标。
  • 就是这样,Maven 将解决剩下的事件。它将下载本地仓库中获取不到的插件,并开始解决。

插件与指标

一个插件通常能够实现多个工作,每一个工作就叫做插件的一个指标。如执行 mvn install 命令时,调用的插件和执行的插件指标如下:

将插件绑定到生命周期

Maven 的生命周期是形象的,理论须要插件来实现工作,这一过程是通过将插件的指标(goal)绑定到生命周期的具体阶段(phase)来实现的。如:将 maven-compiler-plugin 插件的 compile 指标绑定到 default 生命周期的 compile 阶段,实现我的项目的源代码编译:

内置绑定

Maven 对一些生命周期的阶段(phase)默认绑定了插件指标,因为不同的我的项目有 jar、war、pom 等不同的打包形式,因而对应的有不同的绑定关系,其中针对 default 生命周期的 jar 包打包形式的绑定关系如下:

在第二列中,冒号后面是插件的前缀(prefix),是配置和应用插件的一种简化形式;冒号前面即是绑定的插件指标。

你的仓库中有哪些 maven 插件?

` 寄存目录 =% 本地仓库 %orgapachemavenplugins
`

Maven 官网上有更具体的官网插件列表:

自定义插件

在后面咱们提到了一个 Mojo,Mojo 实际上是一个 Maven 的指标,插件蕴含任意数量的指标(Mojos)。Mojos 能够定义为带正文的 java 类或 Beanshell 脚本。Mojo 指定无关指标的元数据:指标名称,它适宜生命周期的哪个阶段,以及它冀望的参数。

Mojo 术语是在 maven2 中引入,它是对如何编写插件的残缺重写。Mojo 是对 Pojo(plain-old-java-object)的一种改良,它将 maven 替换为 plain。

一个 Mojo 蕴含一个简略的 Java 类。插件中多个相似 Mojo 的通用之处能够应用形象父类来封装。Maven 插件我的项目的打包形式 packaging 必须为 maven-plugin。

实现自定义插件

创立 maven 我的项目,增加依赖:

`<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/maven…d”>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.tian.maven</groupId>
    <artifactId>my-maven-plugin</artifactId>
    <packaging>maven-plugin</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>my-maven-plugin</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <!–api 依赖 –>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-plugin-api</artifactId>
            <version>3.0</version>
        </dependency>
        <!– 注解反对 –>
        <dependency>
            <groupId>org.apache.maven.plugin-tools</groupId>
            <artifactId>maven-plugin-annotations</artifactId>
            <version>3.4</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>
`

TianMojo 继承了 AbstractMojo 这个抽象类,并实现了 execute() 办法,该办法就是用来定义这个 Mojo 具体操作内容,咱们只须要依据本人的须要来编写本人的实现即可。

`// 自定义插件类
//name 就是前面应用该插件的时候 excuation 外面的
@Mojo(name = “tian”)
public class TianMojo extends AbstractMojo
{
    // 配置的是本 maven 插件的配置,在 pom 应用 configration 标签进行配置 property 就是名字,
    // 在配置外面的标签名字。在调用该插件的时候会看到,还能够设置默认值
    @Parameter(property = “userName”,defaultValue = “ 田哥你好 ”)
    private String userName;
    @Parameter(property = “pwd”,defaultValue = “000000”)
    private String pwd;
    @Override
    public void execute() throws MojoExecutionException, MojoFailureException {
        System.out.println(“userm=” + userName + ” pwd=” + pwd);
        System.out.println(“my plugin is running”);
    }
}
`

而后在执行 mvn clean install 命令。

应用自定义插件

在咱们的 maven 我的项目增加咱们自定义的插件:

`<build>
    <plugins>
      <plugin>
        <groupId>com.tian.maven</groupId>
        <artifactId>my-maven-plugin</artifactId>
        <version>1.0-SNAPSHOT</version>
        <executions>
          <execution>
            <!– 示意咱们在执行 mvn install 时候就会执行咱们自定义的插件 tian–>  
            <phase>install</phase>
            <goals>
              <!– 指标 –>
              <goal>tian</goal>
            </goals>
          </execution>
        </executions>
        <!– 咱们自定义的 Mojo 中定义的属性 –>
        <configuration>
          <userName> 田维常 </userName>
          <pwd>123456</pwd>
        </configuration>
      </plugin>
    </plugins>
</build>
`

而后就能够在咱们的 IDEA 中看到:

双击my:tian

还能够应用命令的形式:mvn my:tian

my 是前缀,是 my-maven 的缩写。后缀 tian 就是插件绑定的指标。

到此,咱们的自定义 Maven 插件就搞定了。

总结

Maven 插件是 Maven 的外围性能,插件类型有构建类型和报告类型,插件能够有多个指标也就是能够了解为多个性能。自定义插件次要两步:依赖相干 jar 包和重写 Mojo。自定义的插件的应用和咱们用其余插件应用一样,只有在 pom 中配置相干 <plugin> 配置即可。

只有真正了解了插件实现原理后,能力缓缓去领会猜想咱们平时应用的那些 mvn… 命令背地是如何实现的。

[学习是一个人对这个神奇世界一直意识的一个过程]

举荐浏览

把握 Mybatis 动静映射,我可是下了功夫的

2020 所有原创

写给大忙人看的 JAVA 核心技术.pdf 下载

图解多线程

京东面试:说说 MySQL 的架构体系

正文完
 0