1. 程式人生 > >gradle檢視解決依賴問題-記錄Butterknife8.5.1

gradle檢視解決依賴問題-記錄Butterknife8.5.1

相信每個人都遇到過重複引用庫、衝突的問題。如support-v4、appcompat-v7、NineOldAndroids很容易被多次引用。
前同事在臨上線前打包遇到merg出錯(內心飄過一萬頭草泥馬)
TransformException
How fix?
一個一個module檢查過去沒有,這時候就有可能是第三方庫引用了,可是第三方庫那麼多,How do?頭疼,先換個姿勢找到哪兩個jar導致重複。通過開啟檔案發現DisplayManagerCompat類屬於哪兩個jar包
Open class
jar
可以確定出問題的jar為support-compat-25.1.0和support-v4-22.2.0,我們自己有依賴compat、v4 22.2.0,現在要找出衝突的compat25.1是哪個庫新增的(前戲太長,我們要直奔主題)。使用maven時可以檢視依賴關係,沒理由要取代maven的gradle不支援。
- gradle projects
先檢視有哪些專案
projects


- gradle dependencies
dependencies
從圖中可以看到是butterknife8.5.1依賴了compat25.1.0。
- 新增exclude
修改compile新增exclude後解決

compile ("com.jakewharton:butterknife:8.5.1") {
exclude group : 'com.android.support'
}

擴充套件

  • 強制指定低版本force
    同一個grop的庫多個引用時,會自動取最版本最高的,即我們通過gradle dependencies檢視後的標(*)或者 -> 後的版本。
    但是我們有時候需要覆蓋使用為低版本,應用場景,使用React Native時想指定‘com.android.support:appcompat-v7:23.0.1’可以修改為
   compile ("com.android.support:appcompat-v7:23.0.1") {
        force = true
    }
  • 檢視pom依賴關係
    可以通過gradle命令檢視依賴關係,那麼我們寫在build.gradle裡面的依賴關係一定也有地方指定。每個工程裡面指定gradle,gradle查詢依賴庫。根據這個邏輯,檢視專案資料夾下的.idea->libraries->butterknife_8_5_1.xml、support_compat_25_1_0.xml、support_v4_22_2_0.xml,其中butterknife_8_5_1.xml內容如下:
<component name="libraryTable">
  <library name="butterknife-8.5.1">
    <CLASSES>
      <root url="file://$PROJECT_DIR$/regClientDoc/build/intermediates/exploded-aar/com.jakewharton/butterknife/8.5.1/res" />
      <root url="jar://$PROJECT_DIR$/regClientDoc/build/intermediates/exploded-aar/com.jakewharton/butterknife/8.5.1/jars/classes.jar!/" />
    </CLASSES>
    <JAVADOC />
    <SOURCES>
      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.jakewharton/butterknife/8.5.1/16724f486072e3ab970fc47ccff6f9013061fa6/butterknife-8.5.1-sources.jar!/" />
    </SOURCES>
  </library>
</component>

根據source檔案上級目錄進入,找到butterknife-8.5.1.pom檔案,內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.jakewharton</groupId>
  <artifactId>butterknife</artifactId>
  <version>8.5.1</version>
  <packaging>aar</packaging>
  <name>Butterknife</name>
  <description>Field and method binding for Android views.</description>
  <url>https://github.com/JakeWharton/butterknife/</url>
  <licenses>
    <license>
      <name>The Apache Software License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
    </license>
  </licenses>
  <developers>
    <developer>
      <id>jakewharton</id>
      <name>Jake Wharton</name>
    </developer>
  </developers>
  <scm>
    <connection>scm:git:git://github.com/JakeWharton/butterknife.git</connection>
    <developerConnection>scm:git:ssh://[email protected]/JakeWharton/butterknife.git</developerConnection>
    <url>https://github.com/JakeWharton/butterknife/</url>
  </scm>
  <dependencies>
    <dependency>
      <groupId>com.jakewharton</groupId>
      <artifactId>butterknife-annotations</artifactId>
      <version>8.5.1</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.android.support</groupId>
      <artifactId>support-annotations</artifactId>
      <version>25.1.0</version>
      <scope>compile</scope>
    </dependency>
    <!-- 罪魁禍首  -->
    <dependency>
      <groupId>com.android.support</groupId>
      <artifactId>support-compat</artifactId>
      <version>25.1.0</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
</project>

可以看到其中有依賴support-compat25.1.0
- exclude的其它用法

關注我的公眾號

風控小妹的Three

參考: