2016-02-29 52 views
2

我一直在尋找一種方法來解析字符串得到一個int的列,並偶然發現:什麼是autovalue.shaded或什麼是陰影的jar?

NumberUtils.toInt("blah",99); 

我輸進我的IDE,它自動進口這對我來說:

import autovalue.shaded.org.apache.commons.lang.math.NumberUtils; 

所以我很想知道,什麼是autovalue.shaded,爲什麼它是'陰影'org.apache.commons

是否可以安全使用它來滿足我對NumberUtils的需求?

我嘗試過搜索,但我並不熟悉搜索結果帶來的假設知識,如陰影的jar和超級jar。

enter image description here

回答

1

「底紋」是你自己的jar文件中嵌入的依賴類的過程。 AutoValue部分是爲了限制瞬態依賴性,同時也是爲了確保其依賴關係的版本穩定性。

你可以閱讀更多有關底紋這裏:https://maven.apache.org/plugins/maven-shade-plugin/

我會強烈建議不要使用在你的代碼的陰影依賴,因爲它意味着你不再有依賴版本控制。您可以直接添加依賴項,讓您控制何時更新。

您可能還想檢查您的gradle依賴關係,以確保您的compile目標中沒有AutoValue。我從您的其他依賴項中看到,這是一個Android項目,如果AutoValue位於compile目標上,那麼您將擁有一個更大的APK,然後您需要。它應該通過apt包含在註釋處理器類路徑中,以便它的類不包含在最終產品中。 Hugo Visser擁有一個不錯的gradle plugin,用於爲Android項目啓用apt目標。

+0

謝謝,這是有道理的。我沒有使用'apt',但我使用Proguard,是否可以完成同樣的任務 - 防止最後一個APK中出現陰暗的罐子? – Mendhak

+1

Proguard可能會做一些,但這不是真正的解決方案。它增加了更多的複雜性和挑戰(調試,調試構建的複雜性)來解決一個問題,只是簡單地包含一個不應該存在的依賴。這就好像將espresso或其他測試庫放在編譯範圍內,然後使用proguard來擺脫它們。正確的解決方案是把它放在哪裏。雨果的android-apt插件使得它有2個新行(每個build.grade文件中有一行),這就是它。 – rharter

+0

感謝您的解釋(S) – Mendhak