Имеет ли смысл использовать небольшую часть зависимости?

#java #maven #dependencies

#java #maven #зависимости

Вопрос:

Я использую Google Directions API для получения маршрута между двумя точками. В настоящее время я просто отправляю HTTP-запрос конечной точке API, вот так:

 URL url;
URLConnection request;
    try {
        url = new URL(
            "https://maps.googleapis.com/maps/api/directions/json"  
            "?origin=Alzenau"  
            "amp;destination=Dortmundamp;"  
            "key=xxxxxxxxxxxx"
        );

        request = url.openConnection();
        request.connect();

        // Convert to a JSON object
        JsonParser jp = new JsonParser();
        JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent()));
        JsonObject rootobj = root.getAsJsonObject();

        ConvertRoutes(rootobj);
    } catch (IOException ex) {
        ex.printStackTrace();
    }
  

Однако есть зависимость от Google, которую я могу использовать для достижения той же цели: https://mvnrepository.com/artifact/com.google.maps/google-maps-services/0.9.3

Эта зависимость содержит все API Карт Google (направления, места и т.д.)

Мой вопрос: Имеет ли смысл использовать зависимость от Google, когда я использую только небольшую часть его функций? Загружает ли Java всю зависимость или только те части, которые я фактически использую?

Спасибо!

Комментарии:

1. Вы могли бы просто загрузить зависимость, которую вы фактически используете, а затем исключить все транзитивные зависимости, которые могут использоваться не вами, а другими функциями api (которые вы все еще не используете)

2. Это зависит от того, как построена библиотека, но она может загружать больше классов, чем необходимо. Действительно ли это было бы проблемой? Вы ограничены в памяти?

3. @Lino Зависимость Google включает все свои API в одну зависимость, насколько я знаю, поэтому я не мог исключить одну, поскольку все они находятся в одном артефакте

4. @Thomas Использование библиотеки вообще не проблема, мне просто интересно, что я должен рассматривать как «наилучшую практику»

5. @Lino Я был бы осторожен при исключении транзитивных зависимостей, потому что трудно проверить, используются ли эти зависимости каким-либо образом в некотором стеке вызовов.

Ответ №1:

Это не однозначное решение «да» / «нет».

Если вы просто вызываете один http-интерфейс и ваше приложение работает нормально (и достаточно быстро), нет реальной причины его менять.

Использование Java API, вероятно, уменьшит размер вашего кода (и у вас будет безопасность типов), но вам нужно проверить дерево зависимостей этого API. Если он содержит зависимости, которые у вас уже есть в вашем дереве зависимостей, вы можете получить конфликты из-за разных версий одних и тех же артефактов.

Комментарии:

1. Если бы я использовал библиотеку, у меня было бы 2 разные версии зависимости Apache httpclient. Хорошая мысль, спасибо за ваш ответ!