Что такое autovalue.shaded или что такое затененная банка?
Я искал способ разобрать строку, чтобы получить int, и наткнулся на:
NumberUtils.toInt("blah",99);
Я набрал его в моей IDE, и он автоматически импортировал это для меня:
import autovalue.shaded.org.apache.commons.lang.math.NumberUtils;
Так что мне любопытно узнать, что такое autovalue.shaded
о и почему это "затенение" org.apache.commons
?
И безопасно ли использовать это, чтобы удовлетворить мою потребность в NumberUtils
?
Я попытался выполнить поиск, но я не знаком с предполагаемыми знаниями, которые выдают результаты поиска, такие как затененная банка и банка Uber.
1 ответ
"Затенение" - это процесс встраивания классов зависимостей в ваш собственный файл JAR. AutoValue делает это отчасти для ограничения переходных зависимостей, а также для обеспечения стабильности версий их зависимостей.
Вы можете прочитать больше о Shading здесь: https://maven.apache.org/plugins/maven-shade-plugin/
Я бы настоятельно рекомендовал не использовать затененную зависимость в вашем коде, так как это означает, что вы больше не контролируете версию зависимости. Вы можете просто добавить зависимость напрямую, предоставляя вам контроль над ее обновлением.
Возможно, вы также захотите проверить свои зависимости gradle, чтобы убедиться, что у вас нет AutoValue в вашем compile
цель. Из ваших других зависимостей я вижу, что это проект Android, и если AutoValue находится на compile
цель, то вы получите гораздо больший APK, чем вы хотите. Он должен быть включен в classpath обработчика аннотаций через apt
, так что его классы не включены в ваш конечный продукт. У Hugo Visser есть хороший плагин Gradle для включения apt
цель для проектов Android.