未解决问题备份

1. jvm

  对于重复类的问题依然不太明确
 
  记得当时上课的时候说过一些,可是不太记得了,是不是这样?以下:
当咱们有两个不一样的jar包 test-1.0.jar test-2.0.jar, 而这两个jar包定义了相同的全限定类,而且两个jar同时存在与classpath时,jvm在使用哪一个jar包的同名类上是不肯定的,可能因不一样的JVM而异,例如会使用先加载的那个jar包
 
  而这样形成的问题就是不肯定性,有可能test-1.0里的类与test-2.0里的同名类存在不兼容的问题,例如类内的方法可能实现已经不同了
 
  而咱们在实现项目的时候实际上也有重复类的现象,例如qsso和jcl-over-slf4j的jar,而当时咱们并未去作重复类的exclude工做,项目也能正常运行,这是由于这里两个jar里的common-logging正好没有兼容性问题
 
  因此咱们为了排除这种潜在的有可能存在的兼容性问题,须要使用enforcer去查找这些重复类并在pom里面exclude掉.
 
  这样分析是否正确?
 
2.
在super pom里看到下面的规则
                        <bannedDependencies>
                            <searchTransitive>true</searchTransitive>
                            <excludes>
                                <exclude>commons-logging</exclude>
                                <exclude>org.slf4j:*:(,1.6)</exclude>
                            </excludes>
                        </bannedDependencies>
1. 若是说pom里同时引了 qsso 和 jcl-over-slf4j 的包, enforcer 会报 commons-logging 重复的error
2. 将qsso的commons-logging exclude掉, enforcer再也不报错
问题 :
1. <exclude>org.slf4j:*:(,1.6)</exclude> 不是说明 org.slf4j 这个groupId 本身也已经被ban了么,为何没有报 banned dependency 的error 呢
2. 既然会报重复类, 说明 slf4j 也依赖了 commons-logging, 为何 tree:dependency 输出里看不到 slf4j 对 commons-logging 的依赖 呢
3. 既然slf4j包含commons-logging, 为何它不会被报 bannedDependencies error 呢
 
3.
你的意思是你以为bannedDependencies 它 ban 的是groupId和artifactId, 而不是这个groupId artifactId 对应的jar 里面的package.class 这个类是这意思么
彷佛有点道理
另外,我打开了qsso的jar包,看了他的pom, 里面并无 commons-logging 这个 dependency, 不知为什么在 dependency:tree 里会显示他对 commons-logging 有依赖?
相关文章
相关标签/搜索