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