zoukankan      html  css  js  c++  java
  • 关于maven的规则插件:Maven Enforcer plugin;可自定义规则

    Maven提供了Maven-Enforcer-Plugin插件,用来校验约定遵守情况(或者说校验开发环境)。比如JDK的版本,Maven的版本,开发环境(Linux,Windows等),依赖jar包的版本等等

    看有些文章说,这个插件检查的是maven最终使用的版本情况,我不认同,因为这个插件有个设置是:是否检查传递依赖

    如果不设置,就有可能失去对属于间接依赖的插件的检查(假如这个依赖插件只出现在间接依赖里)如果设置了,就会检查传递性依赖,如果传递性依赖不满足条件也会导致项目编译失败,这是不合理的,因为maven最终发布的项目jar包里,有可能并包含这个依赖(在处理冲突时去掉:路径最短原则;第一声明原则)

    另外:这个插件无法处理像 [INFO] |  - org.springframework:spring-expression:jar:3.2.4.RELEASE:compile 这种后面还带“RELEASE”信息的

    我们再来看下mvn的dependency插件的功能:

    mvn dependency:tree -Dverbose  可以显示哪些版本因为冲突而被忽略

    mvn dependency:copy-dependencies -DoutputDirectory=$WORKSPACE/dependencies可以把项目的所有依赖copy到一个指定的目录,通过这个目录,你可以看到项目的所有依赖信息。

    你在根目录(父pom文件位置)执行这条命令,就能看到项目的所有依赖(包括传递性依赖);你在子模块(子pom.xml文件所在目录)目录执行这个命令,就能看到子模块的所有依赖(包括传递性依赖),而且是从上图的信息里可以看到,各个模块冲突的依赖已经被忽略。

    但是它存在的问题是,如果多个子模块含有一个依赖的多个版本,该如何处理?最终的项目打包会使用哪一个版本呢?

    mvn install/mvn deploy 本地安装或者远程部署里,只能存在一个版本的依赖

    内嵌的规则:

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

    自定义规则:

    http://maven.apache.org/enforcer/enforcer-api/writing-a-custom-rule.html

    参考:

    1、http://www.cnblogs.com/qyf404/p/4829327.html

    2、http://blog.csdn.net/wangjunjun2008/article/details/11599307

    3、http://zhwj184.iteye.com/blog/1528627

    4、https://oolap.com/2015-10-22-use-maven-enforcer-plugin-check-deps

    5、官网:http://maven.apache.org/enforcer/maven-enforcer-plugin/

  • 相关阅读:
    文件路径选择中的三态逻辑
    .net版本号
    使用MSBuild编译vs多个解决方案
    CEF截图
    使用SharpZIpLib写的压缩解压操作类
    软件试用期设置
    list转datatable
    excel 导入
    网站登录简单验证码
    UEditor编辑器
  • 原文地址:https://www.cnblogs.com/shengulong/p/8280870.html
Copyright © 2011-2022 走看看