Я только что выпустил небольшую библиотеку Java, которая предлагает только несколько классов и методов. Поскольку я создавал проект с Maven, я сразу использовал несколько сторонних библиотек для достижения своих целей, а именно:
- commons-lang3 (для некоторых общих вещей Java)
- slf4j-api (для регистрации)
- commons-io (для небольшого количества файлового материала - я думаю, буквально читая файл один раз)
Я не хочу, чтобы моя библиотека выглядела раздутой в глазах других. Должен ли я пытаться убрать свою зависимость от этих библиотек, чтобы свести к минимуму мой след? Любой совет, какие типы библиотек лучше всего избегать при рассмотрении вопроса об использовании большего количества в будущем?
Ответы:
Я отвечаю на это с учетом вашей конкретной ситуации. Я бы сказал, что это нормально - использовать эти библиотеки. Просто убедитесь, что ваш slf4j-api не несет с собой реализацию. Под этим я подразумеваю пометить зависимость реализации как «тест». НАПРИМЕР:
Это подробно описано в FAQ по SLF4j.
Что касается двух других, IME, они всегда обратно совместимы. Поэтому, если через 5 лет мне нужно будет использовать вашу библиотеку, а вы используете старую ее версию, я могу просто исключить ваши зависимости, и наш код все равно будет работать. Другими словами, используя эти специфические библиотеки, вы не будете использовать jar-hell для других.
Если я использую вашу библиотеку через Maven, я не буду замечать, если ваша библиотека раздутая или нет. Я просто буду зависеть от твоего и использовать его. Я думаю, что более важно, чтобы ваш код работал правильно, а не занимал меньше места. Я предпочитаю использовать commons-io, а не изобретать велосипед с ошибкой.
источник
slf4j-api
и никаких других связанных артефактов, предоставленных или нет. См. Slf4j.org/manual.html#projectDep .exclude
s iirc), которые мне приходилось выполнять, когда определенные модули в моих зависимостях не могли «договориться» о версии slf4j. Из вашего ответа похоже, что если бы разработчики модулей выставили его какprovided
, не было бы таких проблем, верно?provided
- очень ненавязчиво.mvn dependency:analyze
приносила дерьмовые версии, пока не была исключена :)Нет.
«Раздувание» - это миф. Независимо от того, сколько кода находится в вашей библиотеке, если часть этого кода никогда не используется, он не будет перемещаться по страницам - это никак не повлияет ни на производительность, ни на объем памяти.
С другой стороны, если вам нужна дополнительная функциональность, у вас есть два варианта. Вы можете написать его самостоятельно и потратить много времени и усилий на решение проблем, которые другие уже решали ранее, или вы можете использовать решение, которое уже существует (и было проверено / отлажено / и т. Д.).
Это оставляет нам размер загружаемого файла и объем дискового пространства, и если вы не говорите глупых цифр, в 2013 году это два фактора, которые должны быть ближе к нижней части списка вещей, о которых вам нужно беспокоиться.
источник