电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

Maven插件之Maven-Enforcer-Plugin


发布日期:2021/4/14
 

实际开发中项目经理总会告诉开发人员:开发时要遵守什么什么样的约定命名规范怎么怎样样

约定优于配置很重要!比较规范的公司(或者项目组)会把规范写到文档中让开发人员去遵守

问题来了怎么才能知道大家有没有按照规范走呢?有人会说了找个工具校验一下就可以了开源工具很多是的这是对的但对于项目中使用的程序工具开发环境呢有工作经验的人应该都知道很多时候新手出现诡异的问题一部分原因是因为环境不对或者软件版本不符;这时应该怎么检查呢?

Maven提供了MavenEnforcerPlugin插件用来校验约定遵守情况(或者说校验开发环境)比如JDK的版本Maven的版本开发环境(LinuxWindows等)依赖jar包的版本等等;官网地址:

下面介绍该插件的使用:

<plugin> <groupId>orgapachemavenplugins</groupId> <artifactId>mavenenforcerplugin</artifactId> <version></version> <executions> <execution> <id>enforce</id> <phase>validate</phase> <goals> <goal>displayinfo</goal> <goal>enforce</goal> </goals> </execution> </executions> <configuration> <!规则检查不通过就构建失败;Default:false > <!<failFast>true</failFast>> <rules> <requireMavenVersion> <version></version> </requireMavenVersion> <requireJavaVersion> <version></version> </requireJavaVersion> <bannedDependencies> <!是否检查传递性依赖(间接依赖)> <searchTransitive>true</searchTransitive> <excludes> <exclude>junit:junit</exclude> </excludes> <message>must use TestNG</message> </bannedDependencies> </rules> </configuration> </plugin>

该插件基于<rules>进行校验以上配置了三条规则:

requireMavenVersion表示Maven的版本大于等于;

requireJavaVersion表示JDK的版本大于等于;

bannedDependencies表示禁止使用的依赖其可用配置如下:

searchTransitive:是否搜索间接依赖;

excludes:禁止依赖列表;其表示格式为groupId[:artifactId][:version][:type][:scope][:classifier]中括号内为可选可使用通配符替换整体或者部分;例如以下demo为有效:

<excludes>

<!groupId[:artifactId][:version][:type][:scope][:classifier]>

<exclude>orglog</exclude>

<exclude>orglog:logj</exclude>

<exclude>orglog:logj:</exclude>

<exclude>orglog:*:</exclude><!排除及其以上版本等价于[)>

<exclude>orglog:*:[]</exclude><!明确排除版本>

<exclude>orglog:*:*:jar:test</exclude>

<exclude>*:*:*:jar:compile:tests</exclude>

<exclude>orgapache*:maven*:*</exclude>

</excludes>

includes:从禁止的依赖中排除的依赖列表(当excludes使用通配符时可使用此属性排除);

message:校验失败打印的提示信息;

如果想要配置更为复杂的版本范围可参考:

除了以上的配置外该插件内置了很多其他的规则内置规则完整列表在:

maven默认提供了多种校验规则满足我们各种需求;同时又提供了mavenenforcerruleapi允许我们自定义规则具体参见:

补充如下(重要)
到目前为止Maven没有提供类似Java的@Deprecated注解用于声明依赖废弃因为在pomxml中会引入一些错误的过时了的废弃的依赖又由于Maven的依赖传递特性很容易会引入不想要的jar(尤其是有沖突的jar)
基于此种情况使用MavenEnforcerPlugin插件可以达到以上的目的

上一篇:列举Window对象的方法?

下一篇:没有了