1、maven 传递依赖scope=compile的包,比如:工程A依赖工程B,工程B依赖工程C,那么A工程的jar包含工程C中scope=compile的包
2、排除依赖用<exclusions>,如果A工程只想依赖B,不希望将B工程项下的C工程的包依赖进来,可以:
XML
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
3、当程序中遇到编译没问题,运行有问题时,需要查找工程的依赖树结构,看是否存在运行时需要的包 ,示例如下:
modeling-support工程依赖modeling-facade工程,modeling-facade工程依赖了metrics-api工程
modeling-support pom:
XML
<dependency>
<groupId>com.xxx</groupId>
<artifactId>modeling-facade</artifactId>
</dependency>
modeling-facade pom:
XML
<dependency>
<groupId>com.xxx</groupId>
<artifactId>metrics-api</artifactId>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
metrics-api pom:
XML
<dependency>
<groupId>org.mvel</groupId>
<artifactId>mvel2</artifactId>
</dependency>
当modeling-support 工程执行代码:Keval.eval(combinExpress, metricSourceIdMap);
由于Keval 是在metrics-api工程里面,所以传递依赖后,modeling-support对上述语句编译没问题,但是无法执行Keval.eval ,因为执行此代码需要mvel2的包,然而modeling-facade 工程已经排除了,所以modeling-support 工程也就没有这个jar,进而运行出错