当前位置: 首页 > article >正文

maven冲突解决-enforcer插件介绍

项目使用maven管理jar依赖时有时候会有一些jar之间冲突和类冲突的情况,需要人肉排查。

maven插件enforcer正是解决此问题排查的工具

enforcer插件基本配置及规则列表

enforcer配置示例
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-enforcer-plugin</artifactId><version>1.4.1</version><executions><execution><id>enforce-dependencies</id><goals><goal>display-info</goal><goal>enforce</goal></goals></execution></executions><configuration><rules><requireMavenVersion><version>[3.0.3,)</version></requireMavenVersion><requireJavaVersion><version>1.7.0</version></requireJavaVersion></rules><fail>true</fail></configuration>
</plugin>

该插件默认绑定在validate阶段,有三个目标 display-info和enforce、help

  • display-info用于显示基本环境信息
  • enforce用于规则检查
  • help帮助信息,mvn enforcer:help -Ddetail=true -Dgoal=<goal-name>

该插件内置完整的规则列表:http://maven.apache.org/enforcer/enforcer-rules/index.html

执行命令

  •  enforcer:display-info enforcer:enforce

         

  • enforcer:help -Ddetail=true -Dgoal=enforce
            

enforce目标

支持三个选项: 

  • skip - a quick way to skip checks via a profile or using -Denforcer.skip=true from the command line.
  • fail - if the goal should fail the build when a rule fails. The default is true. If false, the errors will be logged as warnings.
  • failFast - if the goal should stop checking after the first failure. The default is false.

例如:failFast,规则检查不通过就构建失败 

<failFast> true </failFast>
<rules>
     <requireJavaVersion>
         <version> 1.8 . 0 </version>
     </requireJavaVersion>
</rules>

效果如下:

规则示例

    全部规则列表:http://maven.apache.org/enforcer/enforcer-rules/index.html

  •  requireJavaVersion,同理requireMavenVersion、requireOS(不支持表达式,必须准确的写一个版本号,不过可以把version注释掉,不校验操作系统的版本)
<rules>
     <requireJavaVersion>
         <version> 1.8 . 0 </version>
     </requireJavaVersion>
</rules>

 

  • dependencyConvergence(jar包版本冲突依赖检测
<rules>
     <dependencyConvergence>
         <uniqueVersion> false </uniqueVersion>
     </dependencyConvergence>
</rules>


 

  • bannedDependencies(可配置不允许使用的jar),例如只能使用log4j2,不允许使用log4j1
<bannedDependencies>
     <!--是否检查传递性依赖(间接依赖)-->
     <searchTransitive> true </searchTransitive>
     <excludes>
         <exclude>log4j:log4j</exclude>
         <exclude>org.slf4j:slf4j-log4j12</exclude>
         <exclude>org.slf4j:slf4j-log4j13</exclude>
     </excludes>
     <includes>
         <include>org.apache.logging.log4j:log4j-core: 2.5 </include>
         <include>org.apache.logging.log4j:log4j-slf4j-impl: 2.5 </include>
     </includes>
     <message>must use log4j2</message>
</bannedDependencies>

其他规则:http://maven.apache.org/enforcer/enforcer-rules/index.html

自定义检查规则

可以使用maven-enforcer-rule-api自定义规则,http://maven.apache.org/enforcer/enforcer-api/writing-a-custom-rule.html

<rules><myCustomRule implementation="org.apache.maven.enforcer.rule.MyCustomRule"><shouldIfail>false</shouldIfail></myCustomRule>
</rules>


类冲突检测

自定义规则实现,仅把不同jar包的类冲突列出来,已有第三方的extra-enforcer-rules:http://www.mojohaus.org/extra-enforcer-rules/index.html。

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-enforcer-plugin</artifactId><version>1.4.1</version><dependencies><dependency><groupId>org.codehaus.mojo</groupId><artifactId>extra-enforcer-rules</artifactId><version>1.0-beta-4</version></dependency></dependencies><executions><execution><id>enforce-dependencies</id><goals><goal>display-info</goal><goal>enforce</goal></goals></execution></executions><configuration><rules><banDuplicateClasses><findAllDuplicates>true</findAllDuplicates></banDuplicateClasses></rules></configuration>
</plugin>


执行效果:

 

参考:http://maven.apache.org/enforcer/maven-enforcer-plugin/usage.html

http://www.lryc.cn/news/2417164.html

相关文章:

  • 数学规划模型之线性规划
  • 操作系统实验二·生产者消费者问题
  • CodeProject SenseAI服务器:AI最简单的方法
  • 点对点 端到端的区别
  • 【论文阅读】HGT:Heterogeneous Graph Transformer
  • 网络分析——路径分析
  • [计算机效率] 磁盘优化及清理
  • 【已解决】ping: www.baidu.com: 未知的名称或服务
  • linux系统安装步骤
  • _Deallocate 造成 Exception:(_Ptr_user(_BIG_ALLOCATION_ALIGNMENT-1))==0
  • 《新人皮灯笼》里白扇子谋权篡位的暗线
  • 十进制二进制转换简单说明
  • 桌面精灵制作记录
  • linux 搭建webserver-Goahead
  • roundrobin来历_数据中心交换机横向虚拟化集群漫谈
  • GPU算力评估
  • 二极管的作用原理及特性
  • 无敌的Log-Likelihood Ratio(1)——LLR的计算方式
  • 置换怎么表示成轮换_置换群与全同粒子
  • Windows学习笔记5——窗口与消息三
  • C#List 用法
  • 基于SpringBoot中通用Mapper源码解读以及设计通用Service和Controller
  • 5年了,ViewPager2 终于支持 overScrollMode,没错,我干的。
  • VBA学习(34):Split函数应用|分离商品和数量
  • 时间相减_【数学】「干货」错位相减其实没这么难!
  • js 中汉字和Unicode 互转
  • 智能交通系统:未来城市交通的可视化展示
  • rapidgator.net的下载方法
  • 语音识别系列1:语音识别Speech recognition综述
  • 不知道为什么在公司登陆不了csdn