1.项目里重复依赖问题
- 例如a.jar依赖某低版本x.jar,b.jar依赖高版本x.jar,如果在其他pom文件先依赖a.jar后依赖b.jar,则x.jar使用的版本是低版本的,maven会优先使用前部的子依赖,后部依赖会被标记为conflict冲突而强制使用前部依赖。
解决方案:
1.把最高版本的放在前面,maven3在引入这个版本后,不会引入其他版本。
2.用把其他版本排除掉。
3.直接在最前面引入适当版本的依赖,maven不会再引入子依赖。
2.maven-pom文件的scope和maven远程仓库的scope区别
maven的scope默认是Compile的,对于scope=compile的情况,也就是说这个项目在编译,测试,运行阶段都需要这个artifact对应的jar包在classpath中。
maven仓库的Compile Dependencies或Provided Dependencies或者Test Dependencies对应pom的dependency里scope,例如:远程仓库某a.jar的Compile Dependencies包含x.jar,则本地项目里的pom.xml依赖a.jar后,必须保证编译时期x.jar也在classpath环境里,如果a.jar配置了依赖关系,则会自动下载x.jar,否则需要手动build进classpath.
链接: maven dependency中scope=compile 和 provided区别
3.maven-有些jar没有包含pom信息也可以自动下载依赖
- 有时候maven远程仓库jar的Compile Dependencies包含其他jar,但是本身jar的META-INF没有pom.xml依然能自动下载依赖jar,可能是其他编译打包工具定义了依赖关系,maven也能识别进行自动下载,如Ant;否则需要自己手动添加到classpath,使项目在编译时期能找到所有依赖的jar。
解决方案:
1.使用IDE添加依赖。
2.使用maven install然后添加到pom.xml。