当前位置: 首页 > 科技观察

maven常用插件汇总

时间:2023-03-14 23:29:28 科技观察

maven是目前java项目中比较流行的构建工具,尤其是它提供的插件,如果使用得当,整个项目开发过程都会受益,从而提高开发、测试的效率和部署。几个常用插件的用法记录在这里,既方便自己日后复习,也方便有兴趣的同事交流指正。如果你在实践中发现有趣的插件或者更好的用法,欢迎留言分享。Maven项目标准架构插件maven-resources-pluginMaven可以区别对待Java代码文件和资源文件。默认的主资源文件目录是src/main/resources。我们可以通过这个插件过滤资源文件。资源文件过滤是指我们可以在资源文件中使用占位符${propertyName},然后开启对资源文件的过滤,在pom.xml中设置所有{propertyName}对应的值。在此过程中,将值替换为资源文件中对应的${propertyName},实现了代码配置的分离和参数的统一维护。用法示例>src/main/resources*.xmlmapper/**/*.xmlmysqlMapper/**/*.xml*.properties...local我们的主应用集成后,会根据实际需求部署在不同的环境中,如联调环境、测试环境、压力环境、预发布环境、生产环境等,以及资源配置信息在这些环境中显然是不同的。同样,对于每个环境,每个具体的占位符${propertyName}都会有不同的值,而这种场景可以通过Maven的profile来支持,每个profile可以独立维护一组参数值,在mvn包中可以灵活指定;此外,maven还支持在包中指定多个profile,这在进行自动部署时尤为有用。使用这个插件,我们的项目可以支持多种环境,参考命令mvnpackage-Pnocheck,env-test示例用法nochecktruetruetruetruetruelocaltruelocalenv-testenv-test插件2maven-jar-plugin我们在对项目进行模块化的时候,有一些通用的资源文件,基本上大部分模块都会用到,比如log4j.properties,jdbc.properties等有了模块中的这些资源文件,我们就可以独立开发和调试模块了。默认情况下,maven-jar-plugin会将这些资源文件全部打包成一个jar包发布。如果将这样的jar包集成到主应用中部署运行,可能会导致主应用的配置不生效。我称之为配置混乱,为了解决这个问题,可以开启maven-jar-plugin的排除功能,在执行mvnpackage之前排除指定的资源文件。用法示例properties/**log4j.properties插件三个maven-war-plugin项目如果是web主应用,我们可以使用maven-war-plugin过滤webapps下的各种文件。使用参考maven-resources-plugin示例使用org.apache.maven.pluginsmaven-war-plugindemo-Restsrc/main/webapp/WEB-INFtrueWEB-INFweb.xml插件四属性-maven-plugin随着项目的不断迭代,我们的资源配置项会越来越多,这个会直接影响pom.xml的体积膨胀;另外,如果项目的目标部署环境比较多,pom.xml的扩展会比较快,也比较难维护。为了解决这个问题,我们需要将这些配置信息分离出来,根据不同的环境进行分类。使用properties-maven-plugin就可以达到这个效果。示例用法(将各个环境的信息放在不同的目录下,然后在mvn包中切换不同的profile实现,从指定的目录中读取配置信息,并将资源配置文件的占位符替换为读取到的值)org.codehaus.mojoproperties-maven-plugin1.0.0profiles/${runtime.env}/jdbc.propertiesprofiles/${runtime.env}/redis.propertiesprofiles/${runtime.env}/batch.propertiesprofiles/${runtime.env}/config.propertiesinitializeread-project-属性插件五maven-assembly-pluginJava项目中有一类主应用,需要在后台,比如socketservice程序,比如定时调度器,比如dubbo服务程序,这些程序理论上只需要执行一个简单的java命令即可;复杂一点的,我们可以标准化我们的主要应用结构,定义配置文件夹和依赖库文件夹,然后准备启动的批处理脚本sh或bat文件。这个效果可以使用maven-assembly-plugin来实现。示例使用方法org.apache.maven.pluginsmaven-assembly-pluginfalsetarget/classes/package.xmlmake-assemblypackage附package.xmltar.gz<includeBaseDirectory>truesrc/main/bin*.sh*.battrue0755${basedir}/src/main/config*.propertieslog4j.xmlconfigtrue0644${basedir}/src/main/configlog4j.dtdconfig<文件模式>0644libruntime0644附实例生成Java应用结构图插件六maven-shade-plugin有时候,我们需要把所有的配置文件和依赖库文件放在一个jar包中,运维同事只需要执行java-jarbatch.jar就可以完成虽然这也可以使用maven-assembly-plugin来完成,但是在读取配置文件时可能会出现一些问题。这个时候我们可能就需要用到maven-shade-plugin这个插件了。经过笔者的实践按照下面的例子使用配置确实是可以的;当然,本例配置mainClass,直接执行java-jarbatch.jar确实没问题,但是执行javacom.fastjrun.demospring4.BatchInit-classpathbatch.jar也是可以的。示例使用方法org.apache.maven.pluginsmaven-shade-plugin3.0.0shadebatchtruejar-with-dependenciescom.fastjrun.demospring4.BatchInitMETA-INF/spring.handlersMETA-INF/spring.schemasMETA-INF/spring.tooling*:*META-INF/*.SF<排除>META-INF/*.DSAMETA-INF/*.RSA插件七版本-maven-plugin在项目模块化的时候,我们会遇到一个问题,就是项目版本升级的时候,需要父模块和所有子模块中的版本号同时进行更改,而这是一个对于琐碎且容易出错的事情,幸好maven很周到,提供了这样一个插件,我们可以使用命令行来实现效果我们的项目视图如下,参考命令如下mvnversions:set-DnewVersion=1.2-SNAPSHOT总结本文总结了笔者常用的几个插件及其使用方法。经过实践,基于eclipse的kepler和luna版本可以很好的支持maven-resources-plugin、maven-jar-plugin、maven-war-plugin和properties-maven-plugin的使用,同时也支持profile的activeByDefault设置.研发同事可以直接开发调试代码,无需任何调整,并且在开发结束后,可以直接使用mvn命令打包打出各个环境的部署程序。从开发、调试、测试、验证到上线的整个过程,所有模块的pom.xml都不需要修改,直到下一次迭代变更版本,可以直接使用。【本文为专栏作家“崔英峰”原创稿件,转载请联系原作者】点此阅读更多该作者好文