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

活久见 。org.jboss.netty 和 io.netty 你分的清吗?
大家好,我是小猿来也,一个热衷写 bug 的程序猿。
一天我正在专心致志写 Bug 的时候,一个同事跑过来找我。
说有个很特别三方依赖库的 jar 包,里面有一些 netty 的依赖,但是无法确定 netty 的具体版本,让我帮忙给看看。
还有这事儿?
于是就让他把 jar 发来看看,收到后我就赶紧给它解压了,它的目录结构是下面这样的:

原来某宝、某钉的 SDK 就长这样?
大厂的SDK就这?
当时我就

这完全不按套路出牌呀,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这个版本试了下。
<!-- https://mvnrepository.com/artifact/org.jboss.netty/netty -->
<dependency>
<groupId>org.jboss.netty</groupId>
<artifactId>netty</artifactId>
<version>3.2.10.Final</version>
</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试了下
<!-- https://mvnrepository.com/artifact/io.netty/netty -->
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty</artifactId>
<version>3.10.6.Final</version>
</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,也算是涨了知识啦。

然后就是 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 出现呢?它有什么弊端吗?
我们下一篇文章见!
一个SDK给我干懵逼了?大厂的SDK就这?的更多相关文章
- 大厂的 SDK 写法,偷学到了!
自己动手写 SDK 的经验技巧分享 大家好,我是鱼皮. 最近因为工作需要,自己动手写了一些项目的通用 SDK.在编写的过程中,我阅读和参考了不少公司中其他大佬写的 SDK,也总结了一些开发 SDK 的 ...
- [转]关于sdk更新Android SDK Tools 25.3.1版本后使用sdk manager闪退
昨天这两个manager还工作正常,今天更新了一下,发现不可用了,运行avd manager和sdk manager没反应,搜了好多文章,然后看到了下这篇文章<关于sdk更新Android SD ...
- 【iOS与EV3混合机器人编程系列之中的一个】iOS要干嘛?EV3能够更酷!
乐高Mindstorm EV3智能机器人(下面简称EV3)自从在2013年的CES(Consumer Electronics Show美国消费电子展)上展出之后,就吸引了全球广大机器人爱好者的眼球!E ...
- 【记录一个问题】opencv官网的opencv android sdk使用opencl并未用到GPU
UMat u_mat;mat.copyTo(u_mat);cv::cvtColor(u_mat, cv::BGR2GARY);这样的代码反复执行,并未发现GPU占用提升.执行时间与不使用UMat相当. ...
- SDK 开发 .a .framework .bundle (xcode引用) 依赖sdk工程
一. 静态库.a 1.创建静态库工程 Cocoa Touch Static Libray ,然后可以创建一个测试视图 TestView 2.暴露头文件 -> Build Phases--> ...
- Android SDK升级后报错error when loading the sdk 发现了元素 d:skin 开头无效内容
把错误位置的devices.xml这个文件删除,再把sdk里面tools\lib下的这个文件拷贝到你删除的那个文件夹里,重启eclipse
- iOS Swift WisdomScanKit二维码扫码SDK,自定义全屏拍照SDK,系统相册图片浏览,编辑SDK
iOS Swift WisdomScanKit 是一款强大的集二维码扫码,自定义全屏拍照,系统相册图片编辑多选和系统相册图片浏览功能于一身的 Framework SDK [1]前言: 今天给大家 ...
- 准备开一个地图SDK的开源项目
最近有点空闲时间了, 准备开一个地图SDK的开源项目, 现在的地图SDK已经有很多了, 再做一个跟重新发明个轮子差不多, 但还想做的原因是想在别的轮子的基础上造个轮子... 初步设想是基于开源的地图渲 ...
- 基于Win32 SDK实现的一个简易线程池
利用C++实现了一个简易的线程池模型(基于Win32 SDK),方便使用多线程处理任务.共包含Thread.h.Thread.cpp.ThreadPool.h.ThreadPool.cpp四个源文件. ...
随机推荐
- centos7 启动引导顺序
查看默认启动项 grub2-editenv list 查看启动项列表 awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg 设 ...
- 使用ldap客户端创建zimbra ldap用户的格式
cat << EOF | ldapadd -x -W -H ldap://:389 -D "uid=zimbra,cn=admins,cn=zimbra" dn: ui ...
- linux查看文件的编码格式的方法 set fileencoding PYTHON
linux查看文件的编码格式的方法 set fileencoding 乱码原因:因为你的文件声明为utf-8,并且也应该是用utf-8的编码保存的源文件.但是windows的本地默认编码是cp93 ...
- 诸神之眼-Nmap 教程 2
|>>>简版先附上<<<| Nmap基础学习 语法 nmap + [空格] + <选项|多选项|协议> + [空格]+ <目标> 如 nma ...
- BRAM 和 DRAM 区别
转载: BRAM和DRAM的区别 Xilinx的FPGA开发板可以直接调用RAM,其中包括了BRAM和DRAM.经过网上查找资料发现,这两者的区别在于: 选择distributed memory ge ...
- Shell脚本 /dev/null 2>&1详解
Shell脚本---- /dev/null 2>&1详解 1.可以将/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. ...
- 关于jmeter线程组和循环次数的设置
初始设置:设置线程数 n = 80,循环次数a = 1,ramp-up period=5 一 计算最后一个线程的生成时间(last) 总共生成80个线程,总共需要5秒,每秒钟会启动16个线程,所以,第 ...
- nohup 命令 2>&1 |tee lmbench.log & 只适用没有需要敲y或x的
nohup make results 2>&1 |tee lmbench.log & nohup 命令 2>&1 |tee lmbench.log & 只适 ...
- 安全漏洞扫描工具 burpsuite V1.7.32 资料
安装包下载地址:http://www.downxia.com/downinfo/229728.html 实战教程:https://t0data.gitbooks.io/burpsuite/conten ...
- 90%的人都不知道的Node.js 依赖关系管理(上)
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文参考:https://dzone.com/articles/nodejs-dependency-mana ...