一个SDK给我干懵了?大厂的SDK就这?

开发 开发工具
大家好,我是小猿来也,一个热衷写 bug 的程序猿。一天我正在专心致志写 Bug 的时候,一个同事跑过来找我。说有个很特别三方依赖库的 jar 包,里面有一些 netty 的依赖,但是无法确定 netty 的具体版本,让我帮忙给看看。

 [[411255]]

本文转载自微信公众号「小猿来也」,作者小猿来也。转载本文请联系小猿来也公众号。

大家好,我是小猿来也,一个热衷写 bug 的程序猿。

一天我正在专心致志写 Bug 的时候,一个同事跑过来找我。

说有个很特别三方依赖库的 jar 包,里面有一些 netty 的依赖,但是无法确定 netty 的具体版本,让我帮忙给看看。

还有这事儿?

于是就让他把 jar 发来看看,收到后我就赶紧给它解压了,它的目录结构是下面这样的:

当时我就

[[411256]]

这完全不按套路出牌呀,pom 文件哪里去了呢?gradle 文件哪里去了?这是什么黑科技呢?

盯着这个 jar 包解压之后的文件目录,翻来覆去好几遍,也发现相关依赖库的坐标声明文件。

于是就问问同事有没有源文件,他说有,麻溜的发了过来,比平时喊他吃饭都快。

我打开一看,依然啥都没有。

顿时觉得这个类库有点不一样!

没有依赖库的坐标,怎么确定依赖库的版本呢?

同事那边还在催,能先把这个类库为什么没有依赖库的坐标这个点放一放。

所以就先用一个一个版本尝试的方法来先帮他确定依赖的 netty 版本。

我随便打开了一个文件,发现里面有很多org.jboss.netty的依赖。

然后我就打开了 Maven 的中央仓库:https://mvnrepository.com 输入了netty关键字进行搜索。

搜索结果前面很多都是io.netty的信息,到了第7个才是org.jboss.netty的信息,就是我上图中圈出来的那个。

然后我就点了进去:https://mvnrepository.com/artifact/org.jboss.netty/netty

发现里面提供的主要是 Netty3.0.x、3.1.x、3.2.x的版本。

基于常识项目里引用 Netty 基本上都会引用Final的版本,所以我就在这个类库的源文件中加了一个 pom 文件,先拿3.2.10.Final这个版本试了下。

  1. <!-- https://mvnrepository.com/artifact/org.jboss.netty/netty --> 
  2. <dependency> 
  3.     <groupId>org.jboss.netty</groupId> 
  4.     <artifactId>netty</artifactId> 
  5.     <version>3.2.10.Final</version> 
  6. </dependency> 

 

添加完上面的依赖坐标信息后,尝试编译源代码,发现缺少org.jboss.netty.handler.codec.http.websocketx包。

然后分别试了3.1.5.GA缺少org.jboss.netty.handler.codec.http.websocketx包,3.0.0.GA缺少org.jboss.netty.handler.codec.http包。

也就是说3.0.x、3.1.x、3.2.x这个三个系列的版本里没有合适的。

不死心的我又搜了一下整个中央仓库里,也没能查到更多的关于org.jboss.netty的包。

所以到这里 https://mvnrepository.com/artifact/org.jboss.netty/netty 这条路是死了。

但是中央仓库中org.jboss.netty:https://mvnrepository.com/artifact/org.jboss.netty/netty 这个页面中的一段说明引起了我的注意。

Note: This artifact was moved to:

io.netty ? netty

对,就是上面这段话,我在下图圈出了它。

它告诉我们org.jboss.netty >> netty已经迁移到了io.netty >> netty。而且它还提供了跳转链接:https://mvnrepository.com/artifact/io.netty/netty ,所以我就点了进去。

进去后发现这个页面里归档了3.3.x~3.10.x,以及4.0.x的 netty 制品。

我先拿3.10.6.Final试了下

  1. <!-- https://mvnrepository.com/artifact/io.netty/netty --> 
  2. <dependency> 
  3.     <groupId>io.netty</groupId> 
  4.     <artifactId>netty</artifactId> 
  5.     <version>3.10.6.Final</version> 
  6. </dependency> 

 

重新编译之后发现所有的import都没问题了,但是会有部分类的部分方法缺失。

这个时候感觉版本已经比较接近了相对正确的版本了,接下来就选了跟它最近的次新版本3.9.9.Final编译之后发现完全没问题了,在3.10.6.Final中缺失(已被删除的)的方法果然是在3.9.9.Final标记删除的方法。

所以基本上可以认为3.9.9.Final极有可能是这个三方 jar 所依赖的 netty 的版本。

稍微有点儿意外的发现,就是在3.3.x~3.10.x中虽然依赖坐标中的 groupId 是 io.netty 但是实际的包路径却是 org.jboss.netty.xxx,也算是涨了知识啦。

[[411257]]

然后就是 https://mvnrepository.com/artifact/io.netty/netty 这个页面上同样有一段说明

Note: This artifact was moved to:

io.netty ? netty-all

就是上图中我圈出的部分,就是说io.netty >> netty已经迁移到了io.netty >> all了。

同时这个在netty的官网中也有说明

好奇害死猫,所以我就又跑去 https://mvnrepository.com/artifact/io.netty/netty-all 这个页面看了看。

我发现io.netty >> all中归档了4.0.x、4.1.x以及最新的5.0.x

经过对比确认我发现在3.2.x及其之前的版本中 netty 的 groupId 是org.jboss.netty,artifactId 是netty,包路径是org.jboss.netty。

3.3.x~3.10.x中 netty 的 groupId 是io.netty,artifactId 是netty,包路径是org.jboss.netty。

4.0.0.Final及其之后的版本中netty的 groupId 是io.netty,artifactId 是netty-all,包路径是io.netty。

version groupId artifactId package
<=3.2.x org.jboss.netty netty org.jboss.netty
3.3.x~3.10.x io.netty netty org.jboss.netty
=>4.0.0.Final io.netty netty-all io.netty

所以3.9.9.Final就是这个三方 jar 所依赖的 netty 的版本,应该符合预期。

然后就用同事发来的 jar 对应的源码加上我添加的 pom 文件的信息,快速重新打了个包发给了他去救火。

他测试一下,最终给的反馈是完全没问题。

到这里这次给一个无依赖坐标的三方类库项目确定 netty 依赖版本之旅就算结束了,哈哈,都看到这啦还不赶紧关注一下。

最后回到了文章开始的问题,你知道这种无明确依赖坐标信息的 jar 包是如何生成的呢?为什么会有这种 jar 出现呢?它有什么弊端吗?

 

责任编辑:武晓燕 来源: 小猿来也
相关推荐

2024-11-11 14:57:56

JWTSession微服务

2021-12-09 11:31:16

跨域后端开发

2021-08-26 06:57:53

零拷贝技术磁盘

2024-05-07 09:02:47

2013-06-03 15:38:16

iOS开发iOS SDK动态Action Sh

2022-05-31 08:35:05

RocketMQACK客户端

2024-11-08 15:09:59

2017-07-10 16:19:36

IT发财离婚

2019-02-19 19:16:04

程序员元宵节灯谜

2022-03-07 14:57:36

MySQLInnoDB索引

2020-10-24 14:05:34

CEO互联网开发者

2023-01-26 11:43:03

线程池CPUJava

2023-01-26 02:12:23

数据分析梳理业务框架

2021-05-14 07:11:49

方法调用类加载

2021-04-21 08:54:49

Go语言程序

2009-06-22 14:37:00

Java MESDK

2018-07-26 13:04:33

Dell

2013-02-01 16:06:01

云安全云计算云谷

2019-05-23 09:30:22

网络框架数据

2015-06-01 15:11:37

数据库update
点赞
收藏

51CTO技术栈公众号