【问题标题】:Does using a small part of a dependency make sense?使用依赖的一小部分有意义吗?
【发布时间】:2019-04-03 08:11:04
【问题描述】:

我正在使用 Google Directions API 获取两点之间的路线。目前,我只是向 API 端点发送一个 HTTP 请求,如下所示:

URL url;
URLConnection request;
    try {
        url = new URL(
            "https://maps.googleapis.com/maps/api/directions/json" +
            "?origin=Alzenau" +
            "&destination=Dortmund&" +
            "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

此依赖项包含所有 Google Maps API(路线、地点等)

我的问题:当我只使用 Google 的一小部分功能时,使用来自 Google 的依赖项是否有意义? Java 是加载整个依赖项,还是只加载我实际使用的部分?

谢谢!

【问题讨论】:

  • 您可以只加载您实际使用的依赖项,然后排除所有传递依赖项,这些依赖项可能不被您使用,但被 api 的其他功能(您仍然不使用)使用)
  • 这取决于库的构建方式,但它可能会加载比需要更多的类。但这真的会是个问题吗?你有记忆力吗?
  • @Lino 据我所知,Google 依赖项将其所有 API 都包含在一个依赖项中,因此我无法排除其中一个,因为它们都驻留在同一个工件中
  • @Thomas 使用库完全没有问题,我只是想知道我应该考虑什么“最佳实践”
  • @Lino 我会小心排除传递依赖项,因为很难检查这些依赖项是否以某种方式在某些调用堆栈中使用。

标签: java maven dependencies


【解决方案1】:

这不是一个明确的是/否决定。

如果您只调用一个 http 接口并且您的应用程序运行良好(并且足够快),则没有真正的理由更改它。

使用 Java API 可能会使您的代码更小(并且您具有类型安全性),但您需要检查该 API 的依赖关系树。如果它包含您在依赖关系树中已有的依赖关系,您可能会因为相同工件的不同版本而发生冲突。

【讨论】:

  • 我会使用这个库吗,我会有 2 个不同版本的 Apache httpclient 依赖项。值得考虑的好东西,感谢您的回答!
猜你喜欢
  • 2013-10-22
  • 1970-01-01
  • 2017-12-09
  • 1970-01-01
  • 1970-01-01
  • 2011-11-20
  • 2013-10-31
  • 2011-12-31
  • 2010-10-29
相关资源
最近更新 更多