zoukankan      html  css  js  c++  java
  • maven和maven插件开发的心得总结

    今天第一次开发maven插件.

    几个好的资源页面推荐:

    1.apache.maven的官网,plugins开发的文档

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

    2.网上的几个博客论坛可以看看.这是我当时看的.

    http://www.cnblogs.com/davenkin/p/advanced-maven-write-your-own-plugin.html
    https://www.cnblogs.com/luotaoyeah/p/3819001.html

    开发细节:

    0.maven每一个插件的任务叫做"goal",可以取名字;

    可以使用以下命令来new一个插件工程:
    mvn archetype:generate -DgroupId=[...] -DartifactId=codemars-maven-plugin[...] -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-plugin

    1.继承mojo类,要记得使用注解@Mojo,可以配置goal的名字,和默认的phase,phase就是让你的插件和maven的生命周期的哪一个阶段挂钩,到了那个阶段就会执行你的插件.

    2.如果需要项目的一些信息,可以在mojo继承类,声明private的MavenProject类,maven的IOC容器会自动注入.在execute方法里你可通过MavenProject获得项目模块的信息.

    3.MavenProject其实是对应一个Maven项目的module!!!

    4.插件的运行是这样子的滴~

    首先根据你的mvn命令,对父模块执行每一个插件(在生命周期每一个phase里),接下来对每个子模块分别还是按顺序执行插件.

    也就是说,如果你的插件想做到所有模块编译完才做业务逻辑,那得自己去做判断了.比如判断执行的模块数到是不是总的那么多(MavenProject.getModules() 有惊喜~)

    5.执行maven插件:

    有几个官网不一定找得到的信息:

    a)官网讲的是,客户项目的POM里要有build和report配置.官网也将插件分为build类和report类.

    b)实际上,如果POM里没配置这个插件,也能运行.

    比如mvn package pmd:pmd

    其实会去本地仓库查找有没有对应的jar包,没有就去网上查找,或配置的公司中央仓库查找.找不到,就fail

    所以只要你仓库有就能运行!就不需要POM写配置了.(POM写配置被官网称为most direct means)

    6.几个maven命令:

    如果想执行别的POM文件,或者指定路径,就用mvn -f [POM路径]

    也许你可以玩玩 maven install到本地jar:

    mvn install:install-file -DgroupId=[..] -DartifactId=[..] -Dversion=[..] -Dpackaging=jar -Dfile=jar包路径

    编译时,跳过测试test和生成javadoc的命令,让你的package更快.当然如果是做持续CI肯定是不建议这个的.

    -Dmaven.test.skip=true -Dmaven.javadoc.skip=true

    7.java代码使用Runtime里执行mvn,需要改成mvn.cmd

    8.如果想打包一个直接java -jar可执行的jar包,而且把所有依赖打包在一起,可以试试这个插件,配置也很简单.

    <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.4.1</version>
                   <executions>
                       <execution>
                           <phase>package</phase>
                           <goals>
                               <goal>shade</goal>
                           </goals>
                           <configuration>
                               <transformers>
                                   <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                       <mainClass>xxx.main</mainClass>
                                   </transformer>
                               </transformers>
                           </configuration>
                       </execution>
                   </executions>
               </plugin>

    后续继续更新...

    转载请注明来源,谢谢
  • 相关阅读:
    运行自动安装apk代码,报错: Original error: Could not find aapt Please set the ANDROID_HOME environment variable with the Android SDK root directory path.
    已安装Appium-Python-Client,但appium无法导入WebDriver
    打开uiautomatorviewer.bat闪退
    常见的python面试题【杭州多测师】【python笔试题】
    支付功能怎么测试?
    自动化运维工具——ansible详解
    服务端编程——异常+校验器+环境变量
    服务端编程——初始koa
    用postman发送请求,在koa中获取的请求body为undefined
    jQuery入口函数测试
  • 原文地址:https://www.cnblogs.com/zhhiyp/p/9410555.html
Copyright © 2011-2022 走看看