Maven 插件之 maven-enforcer-plugin 解决冲突重复依赖

Maven 插件之 maven-enforcer-plugin 解决冲突重复依赖在项目构建时 通过规则来约束项目配置 如 jdk maven 版本 是否有重复的类 文件编码 文件大小等等 且规则是可以自己扩展的

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:provided org.glassfish:javax.el:jar:3.0.0:compile Duplicate classes: javax/el/LambdaExpression.class javax/el/ValueExpression.class javax/el/ExpressionFactory.class javax/el/MapELResolver.class javax/el/ELClass.class javax/el/PropertyNotFoundException.class javax/el/FunctionMapper.class javax/el/ELResolver.class javax/el/BeanNameResolver.class javax/el/BeanNameELResolver.class javax/el/CompositeELResolver.class javax/el/ELManager.class javax/el/EvaluationListener.class javax/el/ResourceBundleELResolver.class javax/el/ListELResolver.class javax/el/BeanELResolver$BeanProperty.class javax/el/ArrayELResolver.class javax/el/MethodInfo.class javax/el/StandardELContext.class javax/el/VariableMapper.class javax/el/ValueReference.class javax/el/MethodExpression.class javax/el/ELProcessor.class javax/el/TypeConverter.class javax/el/ELContextEvent.class javax/el/Expression.class javax/el/BeanELResolver.class javax/el/BeanELResolver$1.class javax/el/ELException.class javax/el/StaticFieldELResolver.class javax/el/ELContext.class javax/el/ImportHandler.class javax/el/PropertyNotWritableException.class javax/el/MethodNotFoundException.class javax/el/BeanELResolver$BeanProperties.class Found in: org.apache.xbean:xbean-reflect:jar:3.7:compile org.unidal.framework:foundation-service:jar:2.5.0:compile Duplicate classes: org/apache/xbean/recipe/ObjectRecipe$Property.class org/apache/xbean/recipe/ObjectRecipe$Member.class org/apache/xbean/recipe/ObjectRecipe.class org/apache/xbean/recipe/ObjectRecipe$MethodMember.class org/apache/xbean/recipe/ObjectRecipe$CompoundProperty.class org/apache/xbean/recipe/ObjectRecipe$AutoMatchProperty.class org/apache/xbean/recipe/ObjectRecipe$SetterProperty.class org/apache/xbean/recipe/ObjectRecipe$FieldProperty.class org/apache/xbean/recipe/ObjectRecipe$FieldMember.class Found in: org.codehaus.plexus:plexus-container-default:jar:1.6:compile org.unidal.framework:foundation-service:jar:2.5.0:compile Duplicate classes: org/codehaus/plexus/component/builder/XBeanComponentBuilder$RequirementRecipe.class org/codehaus/plexus/component/builder/XBeanComponentBuilder.class org/codehaus/plexus/component/builder/XBeanComponentBuilder$1.class org/codehaus/plexus/component/builder/XBeanComponentBuilder$PlexusConfigurationRecipe.class Found in: javax.servlet:servlet-api:jar:2.5:compile org.apache.tomcat.embed:tomcat-embed-core:jar:8.5.34:provided Duplicate classes: javax/servlet/http/Cookie.class javax/servlet/http/HttpSessionContext.class javax/servlet/http/HttpSessionListener.class javax/servlet/http/HttpSessionAttributeListener.class javax/servlet/ServletRequestAttributeListener.class javax/servlet/ServletRequest.class javax/servlet/http/HttpUtils.class javax/servlet/FilterConfig.class javax/servlet/ServletResponseWrapper.class javax/servlet/ServletResponse.class javax/servlet/SingleThreadModel.class javax/servlet/ServletConfig.class javax/servlet/http/HttpSessionBindingEvent.class javax/servlet/ServletOutputStream.class javax/servlet/ServletContextListener.class javax/servlet/Filter.class javax/servlet/Servlet.class javax/servlet/ServletContextEvent.class javax/servlet/http/NoBodyOutputStream.class javax/servlet/UnavailableException.class javax/servlet/ServletRequestListener.class javax/servlet/http/HttpServletRequest.class javax/servlet/ServletContext.class javax/servlet/FilterChain.class javax/servlet/http/HttpServletRequestWrapper.class javax/servlet/http/HttpSessionBindingListener.class javax/servlet/ServletRequestAttributeEvent.class javax/servlet/ServletRequestWrapper.class javax/servlet/ServletRequestEvent.class javax/servlet/http/HttpServlet.class javax/servlet/http/HttpServletResponseWrapper.class javax/servlet/http/HttpSessionActivationListener.class javax/servlet/http/NoBodyResponse.class javax/servlet/GenericServlet.class javax/servlet/ServletException.class javax/servlet/ServletContextAttributeEvent.class javax/servlet/http/HttpServletResponse.class javax/servlet/ServletContextAttributeListener.class javax/servlet/http/HttpSession.class javax/servlet/RequestDispatcher.class javax/servlet/http/HttpSessionEvent.class javax/servlet/ServletInputStream.class Found in: com.sun.mail:javax.mail:jar:1.4.4:compile javax.mail:mail:jar:1.4.5:compile Duplicate classes: com/sun/mail/iap/Atom.class com/sun/mail/util/logging/MailHandler$TailNameFormatter.class com/sun/mail/pop3/WritableSharedFile.class javax/mail/Session.class com/sun/mail/imap/IMAPFolder.class javax/mail/Multipart.class com/sun/mail/imap/IMAPFolder$FetchProfileItem.class com/sun/mail/pop3/POP3Folder.class com/sun/mail/iap/Response.class com/sun/mail/imap/IMAPFolder$17.class com/sun/mail/util/logging/LogManagerProperties$1.class com/sun/mail/imap/IMAPFolder$8.class javax/mail/internet/MimeBodyPart.class com/sun/mail/handlers/text_plain.class com/sun/mail/handlers/text_xml.class com/sun/mail/smtp/SMTPTransport$DigestMD5Authenticator.class com/sun/mail/smtp/DigestMD5.class com/sun/mail/util/logging/MailHandler.class com/sun/mail/smtp/SMTPTransport$Authenticator.class com/sun/mail/imap/protocol/FetchResponse.class com/sun/mail/smtp/SMTPTransport$NtlmAuthenticator.class javax/mail/internet/MimePartDataSource.class com/sun/mail/imap/protocol/Namespaces$Namespace.class com/sun/mail/auth/Ntlm.class com/sun/mail/iap/Argument.class com/sun/mail/pop3/POP3Message.class com/sun/mail/imap/IMAPFolder$5.class com/sun/mail/imap/IMAPFolder$14.class javax/mail/util/ByteArrayDataSource.class com/sun/mail/imap/MessageLiteral.class javax/mail/internet/MimeBodyPart$MimePartDataHandler.class com/sun/mail/pop3/TempFile.class javax/mail/util/SharedFileInputStream$SharedFile.class com/sun/mail/imap/IMAPStore.class com/sun/mail/imap/protocol/RFC822DATA.class com/sun/mail/imap/IMAPStore$1.class com/sun/mail/util/MailSSLSocketFactory.class com/sun/mail/smtp/SMTPTransport.class com/sun/mail/imap/IMAPFolder$15.class com/sun/mail/smtp/SMTPTransport$PlainAuthenticator.class com/sun/mail/util/MimeUtil$1.class javax/mail/internet/InternetAddress.class com/sun/mail/imap/IMAPFolder$6.class com/sun/mail/imap/IMAPBodyPart.class javax/mail/Transport.class com/sun/mail/imap/IMAPFolder$7.class com/sun/mail/imap/protocol/BODYSTRUCTURE.class com/sun/mail/imap/IMAPFolder$16.class com/sun/mail/imap/IMAPMessage.class com/sun/mail/imap/protocol/IMAPProtocol.class com/sun/mail/util/SocketFetcher$1.class com/sun/mail/iap/Protocol.class com/sun/mail/util/logging/LogManagerProperties.class com/sun/mail/imap/IMAPFolder$1.class com/sun/mail/imap/IMAPFolder$19.class javax/mail/util/SharedFileInputStream.class javax/mail/internet/MimeUtility.class com/sun/mail/pop3/AppendStream.class com/sun/mail/imap/IMAPFolder$4.class com/sun/mail/util/UUEncoderStream.class com/sun/mail/imap/protocol/IMAPSaslAuthenticator.class javax/mail/internet/MimeUtility$1NullInputStream.class com/sun/mail/imap/IMAPFolder$10.class com/sun/mail/imap/IMAPFolder$13.class com/sun/mail/imap/IMAPFolder$18.class com/sun/mail/pop3/POP3Store.class com/sun/mail/smtp/SMTPTransport$LoginAuthenticator.class com/sun/mail/imap/protocol/Namespaces.class com/sun/mail/pop3/Protocol.class com/sun/mail/imap/IMAPFolder$11.class com/sun/mail/util/MimeUtil.class com/sun/mail/imap/IMAPFolder$2.class com/sun/mail/imap/LengthCounter.class com/sun/mail/imap/IMAPFolder$12.class com/sun/mail/imap/IMAPMessage$1FetchProfileCondition.class com/sun/mail/util/MailSSLSocketFactory$MailTrustManager.class javax/mail/Folder.class com/sun/mail/imap/protocol/RFC822SIZE.class com/sun/mail/imap/IMAPFolder$3.class com/sun/mail/imap/IMAPFolder$9.class com/sun/mail/iap/AString.class javax/mail/internet/MimeMessage.class com/sun/mail/util/BASE64EncoderStream.class com/sun/mail/imap/MessageCache.class com/sun/mail/imap/IMAPStore$ConnectionPool.class javax/mail/Version.class com/sun/mail/util/SocketFetcher.class javax/mail/internet/AsciiOutputStream.class javax/mail/PasswordAuthentication.class [INFO] [INFO] --- jacoco-maven-plugin:0.7.6.2:prepare-agent (default-prepare-agent) @ test-app --- [INFO] argLine set to -javaagent:/Users/test/.m2/repository/org/jacoco/org.jacoco.agent/0.7.6.2/org.jacoco.agent-0.7.6.2-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 ) 

更多使用欢迎大家一起来发掘探讨。

今天的文章 Maven 插件之 maven-enforcer-plugin 解决冲突重复依赖分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2024-12-20 23:21
下一篇 2024-12-20 23:17

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/91326.html