51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2298|回复: 0
打印 上一主题 下一主题

[转贴] Maven插件

[复制链接]
  • TA的每日心情
    无聊
    2022-8-5 09:01
  • 签到天数: 2 天

    连续签到: 2 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2019-3-7 15:57:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    Maven的插件

        我们知道mvn 只是抽象了项目构建的生命周期,生命周期本身是不做任何工作的,具体的工作都是由插件来完成。每个个插件都有一个或多个目标(goal),我们通常执行的mvn命令就是去调用mvn的插件,

    如:mvn dependency:list , dependency 是插件前缀,list是插件的目标,denpendency插件还有其他的目标比如说:tree,analyze等。

    插件绑定

        我们在执行mvn clean ,mvn install ,mvn compile的时候为什么不像上面介绍的那样使用 mvn plugin:goal这种方式呢? 应为maven 为各个生命周期的主要阶段都绑定了默认的插件,所以我们执行这些命令的时候是调用了默认的插件和目标。何为插件绑定?把一个生命周期的某个阶段和具体插件的某个目标关联起来,这就是插件绑定。

    为了减少用户的配置,做到开箱即用,maven为我们内置了一些默认的插件绑定:

    clean:

    default:

    site:

    自定义插件的绑定

    用户可以根据需要将某个插件的指定目标绑定到生命周期的某个阶段上。

    方法:

    1. <build>
    2.   <plugins>
    3.     <plugin>
    4.        <groupId>XXXX</groupId>
    5.        <artifactId>XXXX</artifactId>
    6.        <version>XXX</version>
    7.        <excutions>
    8.          <excution>
    9.            <id>attach-source</id>
    10.            <phase>verify</phase>
    11.            <goals>
    12.              <goal>jar-no-fork</goal>
    13.            </goals>
    14.          </excution>
    15.        </excutions>
    16.     <plugin>
    17.   </plugins>
    18. </build>
    复制代码

    注意:

    • 关于插件的version,用户应该声明一个非快照版本
    • 可以使用maven-help-plugin插件查看插件信息,mvn help:describe -Dplugin=xxxx
    • 如果不指定插件绑定的phase,maven会自动根据插件默认的绑定阶段去执行相应动作
    插件配置

    • 命令行插件配置
    1. mvn install -Dmaven.test.skip=true
    复制代码

    通过-D加入参数,实现插件配置

    • pom中插件全局配置
    1. <build>
    2.   <plugins>
    3.     <plugin>
    4.        <groupId>XXXX</groupId>
    5.        <artifactId>XXXX</artifactId>
    6.        <version>XXX</version>
    7.        <configuration>
    8.          <source>1.5</source>
    9.          <target>1.5</target>
    10.        </configuration>
    11.     <plugin>
    12.   </plugins>
    13. </build>
    复制代码
    • pom插件中任务配置

          为插件任务配置特定的参数,如下例:

    1. <build>
    2.   <plugins>
    3.     <plugin>
    4.        <groupId>XXXX</groupId>
    5.        <artifactId>XXXX</artifactId>
    6.        <version>XXX</version>
    7.        <excutions>
    8.          <excution>
    9.            <id>attach-source</id>
    10.            <phase>verify</phase>
    11.            <goals>
    12.              <goal>jar-no-fork</goal>
    13.            </goals>
    14.            <configuration>
    15.               <tasks>
    16.                  <echo> validate phase </echo>
    17.               </tasks>
    18.            </configuration>
    19.          </excution>
    20.        </excutions>
    21.     <plugin>
    22.   </plugins>
    23. </build>
    复制代码
    获取插件信息
    • 在线获取插件信息   

            基本上maven所有的插件都来自apache和codehaus:

            http://maven.apache.org/plugins/index.html

            http://www.mojohaus.org/plugins.html

    • 使用maven-help-plugin

          下面的例子是描述maven-compile-plugin插件:

    1. mvn help:describe -Dplugin=compiler
    复制代码

    上面命令里使用到了目标前缀(goal prefix),help 是maven-help-plugin的目标前缀,compiler是maven-compile-plugin的目标前缀。使用目标前缀可以简化我们使用插件的方式,不用使用maven的坐标来调用插件。如果不使用前缀,上面的命令将变成:

    1. mvn org.apache.maven.plugins:maven-help-plugin:2.1:describe -Dplugin=org.apache.maven.plugins:maven-compile-plugin:2.1
    复制代码

    若只想查看关于插件目标的描述,可以在maven命令后加上-Dgoal=xxx,输出更详细的信息可以加上-Ddetail

    插件解析机制

       我们在命令行调用mvn 插件时,插件的名字是什么,gorupid,artifactid,version分别是什么,插件从哪里获得的?

    • 插件仓库

            maven有单独的插件仓库,配置方式与普通构建的远程仓库不同,如下:

    1. <pluginRepositories>
    2.                 <pluginRepository>
    3.                     <snapshots>
    4.                         <enabled>false</enabled>
    5.                     </snapshots>
    6.                     <id>central</id>
    7.                     <name>repo</name>
    8.                     <url>http://maven:8081/artifactory/repo</url>
    9.                 </pluginRepository>
    10.                 <pluginRepository>
    11.                     <snapshots>
    12.                                                 <updatePolicy>always</updatePolicy>
    13.                                     </snapshots>
    14.                     <id>snapshots</id>
    15.                     <name>repo</name>
    16.                     <url>http://maven:8081/artifactory/repo</url>
    17.                 </pluginRepository>
    18.             </pluginRepositories>
    复制代码

    id、name 、url等的含义与普通仓库一致,一般来说中央仓库的所包含的插件已经能够满足我们日常所需了,所以一般配置一个中央仓库的地址就可以,但是有点需要注意 插件的snapshot 一般都配置为 false,使用稳定版的插件。

    • 插件默认的groupid

    ​​​​​​​在配置pom的时候如果是官方的插件,就可以省略goupid(org.apache.maven.plugins)。但是不推荐使用这种方式,省略的代码不多,但是会对不熟悉maven的同事造成费解。

    • 解析插件的版本

            ​​​​​​​maven在超级pom中为核心插件设置了版本,超级pom 是所有pom的父pom,所以即使我们不配置核心插件的版本,这些核心插件仍然能通过父pom的配置找到版本。

             如果没有指定版本,且使用的插件也不是核心插件,那么maven就会遍历远程仓库的元数据(groupid/)和本地仓库的元数据合并,得出latest和release,maven3中若没有指定版本号,则默认解析为release。保证插件的稳定。依赖maven解析插件版本是不可取的,即时解析的是非快照版,但是也不能保证新版本的逻辑不会改变,所以建议是显示的指定maven插件的版本。

    • 解析插件前缀


    ​​​​​​​        maven插件前缀与groupid和artifactid 一一对应,这种匹配关系保存在 groupid/maven-metadata.xml中,如果不做任何配置,maven会默认使用org.apache.maven.plugins 和 org.codehaus.mojo这两个groupid解析仓库元数据。当然也可以在settings.xml中配置:

    这样maven出了会从上述两个默认的goupid里去解析元数据之外,也会从配置的这个com.your.plugins下元数据的内容。

                maven 解析插件的过成如下:

    • 根据groupid 找到对应的maven-metadata.xml,
    • 根据mavan-metadata.xml里插件前缀和artfactid对应关系找到对应的artifactid
    • 根据版本解析的过程确定版本

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-26 06:21 , Processed in 0.060379 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表