Java的包管理机制
1. 什么是包
- JVM的工作被设计得相当简单:
1.执行一个类的字节码
2.假如这个过程中碰到了新的类,加载他 - 那么去哪里加载他呢?
2. 类路径(Classpath)
- 什么是类路径:-classpath/-cp
- 类的全限定类名(目录层级)唯一确定了一个类
- 包就是把许多类放在一起打的压缩包
3. Classpath hell
- 传递性依赖是指你依赖的类还依赖了别的类
- 全限定类名是类的唯一标识
- 当多个同名类同时出现在Classpath中,就是噩梦的开始
4. 什么是包管理
- 你要使用一些第三方类,就要告诉JVM从哪里找
- 包管理的实质就是告诉JVM如何找到所需的第三方库以及成功地解决其中地冲突问题
5. Maven——划时代的包管理工具
- 约定优于配置(Convention over configuration)
- 必须强调,Maven远远不止是包管理工具
- Maven的包按照约定为所有的包编号,方便检索,groupId/artifactId/version
- 依赖冲突的解决原则:最近的胜出
- 当你看到如下异常的时候:
1.AbstractMethodError
2.NoClassDefFoundError
3.ClassNotFoundException
4.LinkageError - 一般就是包冲突了,解决方法:
1.单独声明需要引用的特定包
2.排除掉冲突的包