Maven踩坑记

1.项目里重复依赖问题

  • 例如a.jar依赖某低版本x.jar,b.jar依赖高版本x.jar,如果在其他pom文件先依赖a.jar后依赖b.jar,则x.jar使用的版本是低版本的,maven会优先使用前部的子依赖,后部依赖会被标记为conflict冲突而强制使用前部依赖。
    解决方案:

1.把最高版本的放在前面,maven3在引入这个版本后,不会引入其他版本。
    
2.用把其他版本排除掉。
    
3.直接在最前面引入适当版本的依赖,maven不会再引入子依赖。

链接: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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容