传递依赖检查

我们通过maven插件

1
org.apache.maven.plugins:maven-enforcer-plugin
启用
1
<requireUpperBoundDeps/>
来检查传递依赖是否高于直接依赖,如果传递依赖的版本比直接依赖的版本高,则打包失败.

1
<requireUpperBoundDeps/>
解释如下:

1
2
3
4
5
6
7
8
9
10
11
IF:

	A-->B1-->C2

	A-->C1

	C2>C1

THEN:

	throw Exception;

我觉得这个检查很有必要,但是解析的范围太宽了.一个项目依赖了很多的开源组件,我们最好是限制这个检查只检查我们自己的jar包.

修改插件默认行为,在

1
org.apache.maven.plugins.enforcer.RequireUpperBoundDeps$RequireUpperBoundDepsVisitor#containsConflicts
中加入:

1
2
3
4
String key=  resolvedPair.constructKey();
if(key!=null && !key.startsWith("com.xxx")){//不检查groupId中包括非com.xxx开头的jar包
  		return false;
}	

demo

下面说下检查出来的提示信息分析,比如下面的情况:

1
2
3
4
5
6
7
8
Failed while enforcing RequireUpperBoundDeps. The error(s) are [
	Require upper bound dependencies error for xxx.interchange:interchange-facade-settle:1.0.0.20121009 paths to dependency are:
	+-xxx.ppm:ppm-integration:1.0.1.6
 	 		+-xxx.interchange:interchange-facade-settle:1.0.0.20121009
	and
	+-xxx.ppm:ppm-integration:1.0.1.6
 	 		+-xxx.core.payengine:payengine-facade:2.0.0.20140314
   	 			+-xxx.interchange:interchange-facade-settle:1.0.0.20121009 (managed) <-- xxx.interchange:interchange-facade-settle:1.3.0.20140303

第一个告诉我们

1
ppm-integration
–>
1
interchange-facade-settle:1.0.0.20121009
.

第二个告诉我们

1
ppm-integration
–>
1
payengine-facade:2.0.0.20140314
–>
1
interchange-facade-settle:1.3.0.20140303

根据maven

1
最短路径优先原则
,
1
ppm-integration
最终会依赖
1
interchange-facade-settle:1.0.0.20121009
.但是
1
payengine-facade:2.0.0.20140314
它依赖
1
interchange-facade-settle:1.3.0.20140303
.如果classpath中只有
1
interchange-facade-settle:1.0.0.20121009
,运行时
1
payengine-facade
就有可能报找不到类,找不到方法之类的错误.

遇到这样的场景,最好是修改我们项目的直接依赖,让

1
ppm-integration
–>
1
interchange-facade-settle:1.3.0.20140303
,然后测试下是否ok.

一次技术问答

## 一次技术问答最近一年多都没有写博客了,技术上做了很多有意义的事情,也有一些经验上的积累,逐步沉淀到博客上。今天回答某公司的技术上的一些疑问,把问题和回答贴上来。逐步`养`自己的技术观。### 1. 如何做数据安全防范?还有哪些支付安全需要注意?数据安全防范主要分为两个...… Continue reading

2016年05月Reading Notes

Published on August 10, 2016

2016年05月Reading Notes

Published on June 19, 2016