Maven 插件之 maven-enforcer-plugin 解決沖突重復依賴

目錄

      • 0、前言
      • 1、enforcer 是什么
      • 2、能干什么
      • 3、怎么用
      • 4、規則
      • 5、擴展規則
      • 6、使用
      • 7、banDuplicateClasses
      • 8、banDuplicatePomDependencyVersions

0、前言

maven 項目種經常出現 jar 包沖突、重復依賴、無效引用怎么辦,maven-enforcer-plugin 了解一下

1、enforcer 是什么

Enforcer is a build rule execution framework
提供了管控一系列環境約束的目標,包括但不限于Maven版本、JDK版本和操作系統家族等多個內置規則以及用戶自定義規則。
https://maven.apache.org/enforcer/maven-enforcer-plugin/index.html

2、能干什么

在項目構建時,通過規則來約束項目配置,如jdk 、maven 版本,是否有重復的類,文件編碼,文件大小等等,且規則是可以自己擴展的

3、怎么用

https://maven.apache.org/enforcer/maven-enforcer-plugin/usage.html

4、規則

https://maven.apache.org/enforcer/enforcer-rules/index.html

5、擴展規則

https://www.mojohaus.org/extra-enforcer-rules/index.html#

6、使用

pom 中配置如下插件

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-enforcer-plugin</artifactId><version>3.0.0-M3</version><executions><execution><id>enforce-versions</id><goals><goal>enforce</goal></goals><configuration><rules><bannedPlugins><!-- will only display a warning but does not fail the build. --><level>WARN</level><excludes><exclude>org.apache.maven.plugins:maven-verifier-plugin</exclude></excludes><message>Please consider using the maven-invoker-plugin (http://maven.apache.org/plugins/maven-invoker-plugin/)!</message></bannedPlugins><banDuplicateClasses><ignoreClasses><!-- example of ignoring one specific class --><ignoreClass>com.xyz.i18n.Messages</ignoreClass><!-- example of ignoring with wildcards --><ignoreClass>org.apache.commons.logging.*</ignoreClass></ignoreClasses><scopes><scope>compile</scope><scope>provided</scope></scopes><findAllDuplicates>true</findAllDuplicates><ignoreWhenIdentical>true</ignoreWhenIdentical></banDuplicateClasses><requireMavenVersion><version>3.2.0</version></requireMavenVersion><requireJavaVersion><version>1.8</version></requireJavaVersion></rules><fail>false</fail></configuration></execution></executions><dependencies><dependency><groupId>org.codehaus.mojo</groupId><artifactId>extra-enforcer-rules</artifactId><version>1.2</version></dependency></dependencies>
</plugin>

7、banDuplicateClasses

重復類檢測用的rule

<banDuplicateClasses><ignoreClasses><!-- example of ignoring one specific class --><ignoreClass>com.xyz.i18n.Messages</ignoreClass><!-- example of ignoring with wildcards --><ignoreClass>org.apache.commons.logging.*</ignoreClass></ignoreClasses><scopes><scope>compile</scope><scope>provided</scope></scopes><findAllDuplicates>true</findAllDuplicates><ignoreWhenIdentical>true</ignoreWhenIdentical>
</banDuplicateClasses>

執行 使用 mvn clean compile 即可
結果輸出,可重點關注 Duplicat classes 部分

[INFO] --- maven-enforcer-plugin:3.0.0-M3:enforce (enforce-versions) @ tet-app ---
[INFO] artifact com.test.maven.test1:com.test.mavne.test1.contract: checking for updates from nexus-public-snapshots
[INFO] artifact com.test.maven.test1:com.test.mavne.test1.contract: checking for updates from nexus
[INFO] Adding ignore: module-info
[INFO] Adding ignore: META-INF/versions/*/module-info
[INFO] Adding ignore: com.xyz.i18n.Messages
[INFO] Adding ignore: org.apache.commons.logging.*
[WARNING] Rule 1: org.apache.maven.plugins.enforcer.BanDuplicateClasses failed with message:
Duplicate classes found:Found in:org.apache.tomcat.embed:tomcat-embed-el:jar:8.5.34:providedorg.glassfish:javax.el:jar:3.0.0:compileDuplicate classes:javax/el/LambdaExpression.classjavax/el/ValueExpression.classjavax/el/ExpressionFactory.classjavax/el/MapELResolver.classjavax/el/ELClass.classjavax/el/PropertyNotFoundException.classjavax/el/FunctionMapper.classjavax/el/ELResolver.classjavax/el/BeanNameResolver.classjavax/el/BeanNameELResolver.classjavax/el/CompositeELResolver.classjavax/el/ELManager.classjavax/el/EvaluationListener.classjavax/el/ResourceBundleELResolver.classjavax/el/ListELResolver.classjavax/el/BeanELResolver$BeanProperty.classjavax/el/ArrayELResolver.classjavax/el/MethodInfo.classjavax/el/StandardELContext.classjavax/el/VariableMapper.classjavax/el/ValueReference.classjavax/el/MethodExpression.classjavax/el/ELProcessor.classjavax/el/TypeConverter.classjavax/el/ELContextEvent.classjavax/el/Expression.classjavax/el/BeanELResolver.classjavax/el/BeanELResolver$1.classjavax/el/ELException.classjavax/el/StaticFieldELResolver.classjavax/el/ELContext.classjavax/el/ImportHandler.classjavax/el/PropertyNotWritableException.classjavax/el/MethodNotFoundException.classjavax/el/BeanELResolver$BeanProperties.classFound in:org.apache.xbean:xbean-reflect:jar:3.7:compileorg.unidal.framework:foundation-service:jar:2.5.0:compileDuplicate classes:org/apache/xbean/recipe/ObjectRecipe$Property.classorg/apache/xbean/recipe/ObjectRecipe$Member.classorg/apache/xbean/recipe/ObjectRecipe.classorg/apache/xbean/recipe/ObjectRecipe$MethodMember.classorg/apache/xbean/recipe/ObjectRecipe$CompoundProperty.classorg/apache/xbean/recipe/ObjectRecipe$AutoMatchProperty.classorg/apache/xbean/recipe/ObjectRecipe$SetterProperty.classorg/apache/xbean/recipe/ObjectRecipe$FieldProperty.classorg/apache/xbean/recipe/ObjectRecipe$FieldMember.classFound in:org.codehaus.plexus:plexus-container-default:jar:1.6:compileorg.unidal.framework:foundation-service:jar:2.5.0:compileDuplicate classes:org/codehaus/plexus/component/builder/XBeanComponentBuilder$RequirementRecipe.classorg/codehaus/plexus/component/builder/XBeanComponentBuilder.classorg/codehaus/plexus/component/builder/XBeanComponentBuilder$1.classorg/codehaus/plexus/component/builder/XBeanComponentBuilder$PlexusConfigurationRecipe.classFound in:javax.servlet:servlet-api:jar:2.5:compileorg.apache.tomcat.embed:tomcat-embed-core:jar:8.5.34:providedDuplicate classes:javax/servlet/http/Cookie.classjavax/servlet/http/HttpSessionContext.classjavax/servlet/http/HttpSessionListener.classjavax/servlet/http/HttpSessionAttributeListener.classjavax/servlet/ServletRequestAttributeListener.classjavax/servlet/ServletRequest.classjavax/servlet/http/HttpUtils.classjavax/servlet/FilterConfig.classjavax/servlet/ServletResponseWrapper.classjavax/servlet/ServletResponse.classjavax/servlet/SingleThreadModel.classjavax/servlet/ServletConfig.classjavax/servlet/http/HttpSessionBindingEvent.classjavax/servlet/ServletOutputStream.classjavax/servlet/ServletContextListener.classjavax/servlet/Filter.classjavax/servlet/Servlet.classjavax/servlet/ServletContextEvent.classjavax/servlet/http/NoBodyOutputStream.classjavax/servlet/UnavailableException.classjavax/servlet/ServletRequestListener.classjavax/servlet/http/HttpServletRequest.classjavax/servlet/ServletContext.classjavax/servlet/FilterChain.classjavax/servlet/http/HttpServletRequestWrapper.classjavax/servlet/http/HttpSessionBindingListener.classjavax/servlet/ServletRequestAttributeEvent.classjavax/servlet/ServletRequestWrapper.classjavax/servlet/ServletRequestEvent.classjavax/servlet/http/HttpServlet.classjavax/servlet/http/HttpServletResponseWrapper.classjavax/servlet/http/HttpSessionActivationListener.classjavax/servlet/http/NoBodyResponse.classjavax/servlet/GenericServlet.classjavax/servlet/ServletException.classjavax/servlet/ServletContextAttributeEvent.classjavax/servlet/http/HttpServletResponse.classjavax/servlet/ServletContextAttributeListener.classjavax/servlet/http/HttpSession.classjavax/servlet/RequestDispatcher.classjavax/servlet/http/HttpSessionEvent.classjavax/servlet/ServletInputStream.classFound in:com.sun.mail:javax.mail:jar:1.4.4:compilejavax.mail:mail:jar:1.4.5:compileDuplicate classes:com/sun/mail/iap/Atom.classcom/sun/mail/util/logging/MailHandler$TailNameFormatter.classcom/sun/mail/pop3/WritableSharedFile.classjavax/mail/Session.classcom/sun/mail/imap/IMAPFolder.classjavax/mail/Multipart.classcom/sun/mail/imap/IMAPFolder$FetchProfileItem.classcom/sun/mail/pop3/POP3Folder.classcom/sun/mail/iap/Response.classcom/sun/mail/imap/IMAPFolder$17.classcom/sun/mail/util/logging/LogManagerProperties$1.classcom/sun/mail/imap/IMAPFolder$8.classjavax/mail/internet/MimeBodyPart.classcom/sun/mail/handlers/text_plain.classcom/sun/mail/handlers/text_xml.classcom/sun/mail/smtp/SMTPTransport$DigestMD5Authenticator.classcom/sun/mail/smtp/DigestMD5.classcom/sun/mail/util/logging/MailHandler.classcom/sun/mail/smtp/SMTPTransport$Authenticator.classcom/sun/mail/imap/protocol/FetchResponse.classcom/sun/mail/smtp/SMTPTransport$NtlmAuthenticator.classjavax/mail/internet/MimePartDataSource.classcom/sun/mail/imap/protocol/Namespaces$Namespace.classcom/sun/mail/auth/Ntlm.classcom/sun/mail/iap/Argument.classcom/sun/mail/pop3/POP3Message.classcom/sun/mail/imap/IMAPFolder$5.classcom/sun/mail/imap/IMAPFolder$14.classjavax/mail/util/ByteArrayDataSource.classcom/sun/mail/imap/MessageLiteral.classjavax/mail/internet/MimeBodyPart$MimePartDataHandler.classcom/sun/mail/pop3/TempFile.classjavax/mail/util/SharedFileInputStream$SharedFile.classcom/sun/mail/imap/IMAPStore.classcom/sun/mail/imap/protocol/RFC822DATA.classcom/sun/mail/imap/IMAPStore$1.classcom/sun/mail/util/MailSSLSocketFactory.classcom/sun/mail/smtp/SMTPTransport.classcom/sun/mail/imap/IMAPFolder$15.classcom/sun/mail/smtp/SMTPTransport$PlainAuthenticator.classcom/sun/mail/util/MimeUtil$1.classjavax/mail/internet/InternetAddress.classcom/sun/mail/imap/IMAPFolder$6.classcom/sun/mail/imap/IMAPBodyPart.classjavax/mail/Transport.classcom/sun/mail/imap/IMAPFolder$7.classcom/sun/mail/imap/protocol/BODYSTRUCTURE.classcom/sun/mail/imap/IMAPFolder$16.classcom/sun/mail/imap/IMAPMessage.classcom/sun/mail/imap/protocol/IMAPProtocol.classcom/sun/mail/util/SocketFetcher$1.classcom/sun/mail/iap/Protocol.classcom/sun/mail/util/logging/LogManagerProperties.classcom/sun/mail/imap/IMAPFolder$1.classcom/sun/mail/imap/IMAPFolder$19.classjavax/mail/util/SharedFileInputStream.classjavax/mail/internet/MimeUtility.classcom/sun/mail/pop3/AppendStream.classcom/sun/mail/imap/IMAPFolder$4.classcom/sun/mail/util/UUEncoderStream.classcom/sun/mail/imap/protocol/IMAPSaslAuthenticator.classjavax/mail/internet/MimeUtility$1NullInputStream.classcom/sun/mail/imap/IMAPFolder$10.classcom/sun/mail/imap/IMAPFolder$13.classcom/sun/mail/imap/IMAPFolder$18.classcom/sun/mail/pop3/POP3Store.classcom/sun/mail/smtp/SMTPTransport$LoginAuthenticator.classcom/sun/mail/imap/protocol/Namespaces.classcom/sun/mail/pop3/Protocol.classcom/sun/mail/imap/IMAPFolder$11.classcom/sun/mail/util/MimeUtil.classcom/sun/mail/imap/IMAPFolder$2.classcom/sun/mail/imap/LengthCounter.classcom/sun/mail/imap/IMAPFolder$12.classcom/sun/mail/imap/IMAPMessage$1FetchProfileCondition.classcom/sun/mail/util/MailSSLSocketFactory$MailTrustManager.classjavax/mail/Folder.classcom/sun/mail/imap/protocol/RFC822SIZE.classcom/sun/mail/imap/IMAPFolder$3.classcom/sun/mail/imap/IMAPFolder$9.classcom/sun/mail/iap/AString.classjavax/mail/internet/MimeMessage.classcom/sun/mail/util/BASE64EncoderStream.classcom/sun/mail/imap/MessageCache.classcom/sun/mail/imap/IMAPStore$ConnectionPool.classjavax/mail/Version.classcom/sun/mail/util/SocketFetcher.classjavax/mail/internet/AsciiOutputStream.classjavax/mail/PasswordAuthentication.class[INFO]
[INFO] --- jacoco-maven-plugin:0.7.6.201602180812:prepare-agent (default-prepare-agent) @ test-app ---
[INFO] argLine set to -javaagent:/Users/test/.m2/repository/org/jacoco/org.jacoco.agent/0.7.6.201602180812/org.jacoco.agent-0.7.6.201602180812-runtime.jar=destfile=/Users/test/Develop/IdeaProjects/test-app/target/jacoco.exec -Xms512m -Xmx1024m
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ test-app ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 6 resources
[INFO] Copying 154 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ test-app ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1432 source files to /Users/test/Develop/IdeaProjects/test-app/target/classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 05:28 min
[INFO] Finished at: 2024-02-26T23:44:18+08:00
[INFO] Final Memory: 68M/664M
[INFO] ------------------------------------------------------------------------

8、banDuplicatePomDependencyVersions

重復的pom 依賴配置 輸出結果

[WARNING] Rule 3: org.apache.maven.plugins.enforcer.BanDuplicatePomDependencyVersions failed with message:
Found 2 duplicate dependency declaration in this project:- dependencies.dependency[com.daojia.mobile:com.daojia.mobile.signalbomb.contract:jar] ( 2 times )- dependencyManagement.dependencies.dependency[com.daojia.mobile:com.daojia.mobile.signalbomb.contract:jar] ( 2 times )

更多使用歡迎大家一起來發掘探討。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/714177.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714177.shtml
英文地址,請注明出處:http://en.pswp.cn/news/714177.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《AI紀元:幻域探險》

游戲項目名稱&#xff1a;《AI紀元&#xff1a;幻域探險》 游戲類型&#xff1a;AI驅動的角色扮演探險游戲&#xff08;RPG&#xff09; 背景設定&#xff1a; 《AI紀元&#xff1a;幻域探險》設定在一個名為“幻域”的廣闊虛擬世界。這個世界由高度發達的AI技術支持&#xff0…

SpringCloud-同步異步通訊比較

本文詳細探討了同步通訊和異步通訊在信息傳遞中的區別&#xff0c;以及它們分別帶來的優勢和不足。通過對支付流程的案例分析&#xff0c;突顯了同步通訊可能面臨的阻塞和服務依賴問題&#xff0c;而異步通訊通過引入事件驅動模式和消息代理&#xff08;Broker&#xff09;成功…

SQL Server 開發環境配置教程(SSMS+SQL Prompt)

背景 記錄一下 SQL Server 常用開發軟件 體驗了各種數據庫IDE(DBeaver、Navicat、DataGrip)之后綜合下來還是感覺 SSMSSQL Prompt 對于 SQL Server 最好用&#xff0c;所以在此記錄一下配置過程 數據庫可視化管理工具SSMS 官方下載地址&#xff1a; https://learn.microsoft…

Java基礎數據結構之棧

一.什么是棧 棧是一種特殊的線性表&#xff0c;它只允許在固定的一端進行元素的添加與使用&#xff0c;且遵循先進后出的原則。添加取用元素的一端稱為棧頂&#xff0c;另一端稱為棧底。出棧和入棧都是操作棧頂元素 二.棧的模擬實現 棧的底層是一個數組 這是里面的成員變量以…

智能汽車加速車規級存儲應用DS2431P+TR 汽車級EEPROM 存儲器IC

DS2431PT&R是一款1024位1-Wire EEPROM芯片&#xff0c;由四頁存儲區組成&#xff0c;每頁256位。數據先被寫入一個8字節暫存器中&#xff0c;經校驗后復制到EEPROM存儲器。該器件的特點是&#xff0c;四頁存儲區相互獨立&#xff0c;可以單獨進行寫保護或進入EPROM仿真模式…

第2章 線性代數

目錄 1. 標量、向量、矩陣和張量2. 矩陣和向量相乘3. 單位矩陣和逆矩陣4. 線性相關和生成子空間5. 范數6. 特殊類型的矩陣和向量7. 特征分解8. 奇異值分解9. Moore-Penrose偽逆10. 跡運算11. 行列式 1. 標量、向量、矩陣和張量 標量&#xff08;scalar&#xff09;&#xff1a;…

【 C++ 】特殊類設計

1、請設計一個類&#xff0c;不能被拷貝 拷貝只會出現在兩個場景中&#xff1a;拷貝構造函數以及賦值運算符重載&#xff0c;因此想要讓一個類禁止拷貝&#xff0c;只需讓該類不能調用拷貝構造函數以及賦值運算符重載即可。在C98和C11都有相對應的方法來解決此問題&#xff0c…

ssm172旅行社管理系統的設計與實現

** &#x1f345;點贊收藏關注 → 私信領取本源代碼、數據庫&#x1f345; 本人在Java畢業設計領域有多年的經驗&#xff0c;陸續會更新更多優質的Java實戰項目希望你能有所收獲&#xff0c;少走一些彎路。&#x1f345;關注我不迷路&#x1f345;** 一 、設計說明 1.1 研究…

day03-Vue-Element

一、Ajax 1 Ajax 介紹 1.1 Ajax 概述 概念&#xff1a;Asynchronous JavaScript And XML&#xff0c;異步 的 JavaScript 和 XML。 作用&#xff1a; 數據交換&#xff1a;通過 Ajax 可以給服務器發送請求&#xff0c;并獲取服務器響應的數據。異步交互&#xff1a;可以在 不…

Java教程:SpringBoot項目如何對接Nacos實現服務發現治理,配置管理

–Nacos大家都知道&#xff0c;不懂的可以去官網或者網上查閱一下&#xff0c;本次給大家講解一下如何在SpringBoot項目中引入Nacos服務來進行服務治理與發現&#xff0c;配置管理等&#xff0c;在微服務當中是必不可少的&#xff0c;各個模塊之間可以通過Feign遠程調用&#x…

物聯網主機:為智能交通賦能

物聯網&#xff08;IoT&#xff09;技術的發展為智能交通領域帶來了許多創新的解決方案。而在物聯網應用中&#xff0c;物聯網主機起著關鍵的作用。本文將為大家介紹一款名為E6000的物聯網主機&#xff0c;它是一種多協議、多接口的物聯網主機&#xff0c;為智能交通系統的建設…

antvX6 - Vue自定義節點,并實現多種畫布操作,拖拽、縮放、連線、雙擊、檢索等等

一、 首先 antv x6 分為兩個版本 低版本和高版本 我這里是使用的2.0版本 并且搭配了相關插件 例如&#xff1a;畫布的圖形變換、地圖等 個人推薦 2.0版本&#xff0c;高版本配置多&#xff0c;可使用相關插件多&#xff0c;但是文檔描述小&#xff0c;仍在更新&#xff0c; 低…

小d和圖片壓縮

題目描述 小ddd和她對象小紅去海洋館玩了&#xff0c;但是由于小ddd拍照技術不好&#xff0c;他對象說把她拍的像嘎子&#xff01; 小ddd看了看&#xff0c;發現是小紅最近長痘痘了&#xff0c;于是他為了討小紅開心&#xff0c;讓痘痘看不見&#xff0c;自學了圖像壓縮這個技…

裝飾器模式 詳解 設計模式

裝飾器模式 它允許你在不改變對象結構的情況下&#xff0c;動態地將新功能附加到對象上。 結構&#xff1a; 抽象組件&#xff08;Component&#xff09;&#xff1a;定義了原始對象和裝飾器對象的公共接口或抽象類&#xff0c;可以是具體組件類的父類或接口。具體組件&…

固定排班計劃

目錄 1.按發車時間排序。 2.排班日期默認當天時間。 3.編輯不可修改線路和排班日期。 4.線路、車號、司機是否匹配&#xff0c;不匹配不可入庫&#xff08;和其他表比&#xff09;&#xff0c;線路、發車時間、司機、車號、日期、上下行相同不可入庫&#xff08;和自己表比…

GO語言學習筆記(與Java的比較學習)(一)

GO的優缺點&#xff1a; 此處引用華為云開發者聯盟的一篇文章&#xff1a; GO語言的亮點很明顯&#xff1a; GoDoc。 GoDoc的靜態語言分析能力很強大&#xff0c;可以直接從代碼和注釋生成漂亮的文檔。這一點區別于其他的類似工具如JavaDoc, PHPDoc或者JSDoc。這些工具需要添加…

如何在群暉Docker運行本地聊天機器人并結合內網穿透發布到公網訪問

文章目錄 1. 拉取相關的Docker鏡像2. 運行Ollama 鏡像3. 運行Chatbot Ollama鏡像4. 本地訪問5. 群暉安裝Cpolar6. 配置公網地址7. 公網訪問8. 固定公網地址 隨著ChatGPT 和open Sora 的熱度劇增,大語言模型時代,開啟了AI新篇章,大語言模型的應用非常廣泛&#xff0c;包括聊天機…

C# Socket通信從入門到精通(21)——TCP發送文件與接收文件 C#代碼實現

1、前言 我們在開發上位機軟件的過程中經常需要發送文件,本文就是介紹如何利用tcp客戶端發送文件、tcp服務器端接收文件,而且本文介紹的方法可以自動發送一個文件夾下的所有子目錄以及所有文件,經驗來自于實際項目,具備非常有價值的參考意義! 2、發送文件以及C#代碼 被發…

LeetCode第48天 買賣股票的最佳時機 買賣股票的最佳時機II 動態規劃

121. 買賣股票的最佳時機 class Solution { public:int maxProfit(vector<int>& prices) {// int res 0 ;// int low INT_MAX;// for (int i 0; i < prices.size(); i) {// low min(low, prices[i]);// res max(res, prices[i]-low);// }// return r…

低密度奇偶校驗碼LDPC(八)——QC-LDPC譯碼器FPGA設計概要

往期博文 低密度奇偶校驗碼LDPC&#xff08;一&#xff09;——概述_什么是gallager構造-CSDN博客 低密度奇偶校驗碼LDPC&#xff08;二&#xff09;——LDPC編碼方法-CSDN博客 低密度奇偶校驗碼LDPC&#xff08;三&#xff09;——QC-LDPC碼概述-CSDN博客 低密度奇偶校驗碼…