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掉.這樣分析是否正確?
在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 重複的error2. 將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 呢
你的意思是你以爲bannedDependencies 它 ban 的是groupId和artifactId, 而不是這個groupId artifactId 對應的jar 裏面的package.class 這個類是這意思麼彷佛有點道理另外,我打開了qsso的jar包,看了他的pom, 裏面並無 commons-logging 這個 dependency, 不知爲什麼在 dependency:tree 裏會顯示他對 commons-logging 有依賴?