活久见 。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.x3.1.x3.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.x3.1.x3.2.x这个三个系列的版本里没有合适的。

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

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

但是中央仓库中org.jboss.nettyhttps://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.x3.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.x3.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.x4.1.x以及最新的5.0.x

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

3.3.x3.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 出现呢?它有什么弊端吗?

我们下一篇文章见!

最新文章

  1. 创建面注记PolygonElement
  2. DbExpressionBinding requires an input expression with a collection ResultType. 参数名: input
  3. css3实践之摩天轮式图片轮播+3D正方体+3D标签云(perspective、transform-style、perspective-origin)
  4. json体会
  5. WPFのTopMost属性的应用
  6. CentOS 7.0安装Nvidia驱动
  7. 【开源java游戏框架libgdx专题】-11-核心库-演员类
  8. 转:WebSocket与Java
  9. uva 1025
  10. Leetcode_145_Binary Tree Postorder Traversal
  11. 实现对ASP.NETMvc及Asp.NetCore的权限控制
  12. Jenkins+Git+Maven搭建自动化构建平台
  13. [物理学与PDEs]第2章第2节 粘性流体力学方程组 2.6 一维粘性热传导流体动力学方程组
  14. win 常用CMD命令备忘
  15. Windows 下 Mysql8.0.12 的安装方法
  16. 从github clone文件: Failed to receive SOCKS4 connect request ack.
  17. SNF快速开发平台MVC-名片管理(实际名片样式)
  18. Paxos Made Simple
  19. 2018.08.29 NOIP模拟 table(拓扑排序+建图优化)
  20. C# MemoryStream先写后读的奇怪现象

热门文章

  1. lua编译为二进制方式
  2. Ansible_常用模块
  3. 搭建 Linux 集群环境
  4. Linux进阶之Jenkins持续集成介绍及安装演示
  5. window location href is not a function(Day_36)
  6. java基础之8种基本数据类型
  7. redis 和 mysql 的主从复制
  8. 5分钟安装docker教程
  9. unity中UI坐标转3d世界坐标
  10. 记go中一次http超时引发的事故