3.9K Star 22.5K Fork 7.8K

GVPdromara / hutool

 / 详情

【6.0.0】升级到6.0不兼容情况汇总,大家一起来统计维护呀

待办的
成员
创建于  
2023-05-29 14:54

本issue为5.x升级到hutool 6.0不兼容汇总
格式:

版本:
不兼容情况:
- xxx
- xxx

评论 (35)

阿超 创建了任务

版本:6.0.0.M3
不兼容情况:

  • ReflectUtil.setFieldValue 已经不存在。(系统关键部位两处用到 ReflectUtil.setFieldValue,如果不用该方法,需要大量修改 Spring Security 及其组件代码 或者自己实现反射方法)
  • AnimatedGifEncoder 不知道是删除了还是在其它包。(确实没找到 :smile:

其它都不是啥大问题,基本就是改包,部分方法名改了或者换了具体所在代码的位置。

逻辑上还没测,因为还没跑起来,无法验证。

1.ReflectUtil.setFieldValue -> FieldUtil.setFieldValue
2. 删了

多句嘴,好像主流的,对 RC、M、Beta 等版本的命名都是用的 “-”,而不是 “.”。例如:6.0.0-M3

版本:5.8.7 -> 6.0.0.M3
不兼容情况:

  • 首先是groupId
<dependency>
-    <groupId>cn.hutool</groupId>
+    <groupId>org.dromara.hutool</groupId>
    <artifactId>hutool-all</artifactId>
-    <version>5.8.23</version>
+    <version>6.0.0-M8</version>
</dependency>
  • 然后是全部的包名
- import cn.hutool.xxx;
+ import org.dromara.hutool.xxx;
  • StrUtil
- import cn.hutool.core.util.StrUtil;
+ import org.dromara.hutool.core.text.StrUtil;
  • NumberUtil
- import cn.hutool.core.util.NumberUtil;
+ import org.dromara.hutool.core.math.NumberUtil;
  • ArrayUtil
- import import cn.hutool.core.util.ArrayUtil;
+ import import org.dromara.hutool.core.array.ArrayUtil;
  • ObjectUtil
- cn.hutool.core.util.ObjectUtil.isNotEmpty(obj)
+ org.dromara.hutool.core.util.ObjUtil.isNotEmpty(obj)
  • lambda整体结构、命名都规范了,以SerXxx开头
- import cn.hutool.core.lang.func.Func1;
+ import org.dromara.hutool.core.func.SerFunction;
- import cn.hutool.core.lang.Filter;
+ import java.util.function.Predicate;
  • 修改Base64
- cn.hutool.core.codec.Base64Encoder.encode(encryptAesKey);
+ org.dromara.hutool.core.codec.binary.Base64.encode(encryptAesKey);
- cn.hutool.core.codec.Base64Decoder.decode(pubKey);
+ org.dromara.hutool.core.codec.binary.Base64.decode(pubKey);
  • generateKey
- cn.hutool.crypto.SecureUtil.generateKey(str)
+ org.dromara.hutool.crypto.KeyUtil.generateKey(str)
  • 反射操作field
- cn.hutool.core.util.ReflectUtil.getFields(clazz)
+ org.dromara.hutool.core.reflect.FieldUtil.getFields(clazz)
  • 日期时间
- cn.hutool.core.date.LocalDateTimeUtil
- cn.hutool.core.date.DateUtil.date()
+ org.dromara.hutool.core.date.DateUtil.now();
  • ArrayUtil
- import cn.hutool.core.util.ArrayUtil;
+ import org.dromara.hutool.core.array.ArrayUtil;
  • dfa
- import cn.hutool.dfa.WordTree;
+ import org.dromara.hutool.core.text.dfa.WordTree;
- cn.hutool.core.text.replacer.ReplacerChain#replace(str)
- org.dromara.hutool.core.text.replacer.ReplacerChain#apply(str)
  • Dict
- import cn.hutool.core.lang.Dict;
+ import org.dromara.hutool.core.map.Dict;
  • JSONObject
- jsonObject.putOpt(key,value).putOpt(key,value)
  • UtilException
- cn.hutool.core.exceptions.UtilException
  • FileUtil
- import cn.hutool.core.io.FileUtil;
+ import org.dromara.hutool.core.io.file.FileUtil;
  • CollUtil
- cn.hutool.core.collection.CollUtil.newArrayList(obj);
+ org.dromara.hutool.core.collection.ListUtil.of(obj);
  • tree
- import cn.hutool.core.lang.tree.Tree;
+ import org.dromara.hutool.core.tree.MapTree;
  • create -> of
- cn.hutool.json.JSONConfig.create()
- Xxx.create()
+ org.dromara.hutool.json.JSONConfig.of()
+ Xxx.of()
  • ReUtil
- cn.hutool.core.util.ReUtil.RE_CHINESE;
+ org.dromara.hutool.core.regex.PatternPool.CHINESE;
  • DefaultSegment
- cn.hutool.core.lang.DefaultSegment#getStartIndex
+ org.dromara.hutool.core.lang.range.DefaultSegment#getBeginIndex
  • fileName
- cn.hutool.core.io.FileUtil.extName(filePath)
+ org.dromara.hutool.core.io.file.FileNameUtil.extName(filePath)
  • http
- cn.hutool.http.HttpUtil.post(url, data, timeout)
+ org.dromara.hutool.http.HttpGlobalConfig.setTimeout(TIMEOUT);
+ org.dromara.hutool.http.HttpUtil.post(url, data)
- cn.hutool.http.HttpUtil.toParams(map)
+ org.dromara.hutool.core.net.url.UrlQueryUtil.toQuery(map)

待补充。。。

1463 loolly admin 1578914022 头像挂件 Looly 拥有者
回复 阿超 成员

ObjectUtil.isNotEmpty -> ObjUtil.isNotEmpty

阿超 负责人设置为阿超
  • BeanUtil
- cn.hutool.core.bean.BeanUtil;
- cn.hutool.core.bean.copier.CopyOptions;
+ org.dromara.hutool.core.bean.BeanUtil;
+ org.dromara.hutool.core.bean.copier.CopyOptions;
  • EnumUtil
- cn.hutool.core.util.EnumUtil;
+ org.dromara.hutool.core.util.EnumUtil;
  • IdUtil
- cn.hutool.core.util.IdUtil;
+ org.dromara.hutool.core.data.id.IdUtil;
  • RegexPool
- cn.hutool.core.lang.RegexPool
+ org.dromara.hutool.core.regex.RegexPool
  • URLDecoder
- cn.hutool.core.net.URLDecoder;
+ org.dromara.hutool.core.net.url.URLDecoder;
  • SpringUtil
- cn.hutool.extra.spring.SpringUtil;
+ org.dromara.hutool.extra.spring.SpringUtil;
  • SecureUtil
- cn.hutool.crypto.SecureUtil;
- cn.hutool.crypto.asymmetric.KeyType;
- cn.hutool.crypto.symmetric.AES;
- cn.hutool.core.util.HexUtil;
- cn.hutool.crypto.BCUtil;
- cn.hutool.crypto.SmUtil;
- cn.hutool.crypto.asymmetric.SM2;
- cn.hutool.crypto.symmetric.SM4;
+ org.dromara.hutool.crypto.SecureUtil;
+ org.dromara.hutool.crypto.asymmetric.KeyType;
+ org.dromara.hutool.crypto.symmetric.AES;
+ org.dromara.hutool.core.codec.HexUtil;
+ org.dromara.hutool.crypto.asymmetric.SM2;
+ org.dromara.hutool.crypto.symmetric.SM4;
+ org.dromara.hutool.crypto.bc.BCUtil;
+ org.dromara.hutool.crypto.bc.SmUtil;
  • ImgUtil
- cn.hutool.core.img.ImgUtil;
+ org.dromara.hutool.swing.img.ImgUtil;
  • RandomUtil
- cn.hutool.core.util.RandomUtil;
+ org.dromara.hutool.core.util.RandomUtil;
- cn.hutool.core.codec.Base64;
- cn.hutool.core.io.FileUtil;
- cn.hutool.core.io.IORuntimeException;
- cn.hutool.system.SystemUtil;
+ org.dromara.hutool.core.codec.binary.Base64;
+ org.dromara.hutool.core.io.IORuntimeException;
+ org.dromara.hutool.core.io.file.FileUtil;
+ org.dromara.hutool.extra.management.ManagementUtil;
+ org.dromara.hutool.swing.img.FontUtil;
  • Captcha
- cn.hutool.core.img.FontUtil;
- cn.hutool.captcha.CaptchaUtil;
- cn.hutool.captcha.CircleCaptcha;
- cn.hutool.captcha.GifCaptcha;
- cn.hutool.captcha.LineCaptcha;
- cn.hutool.captcha.ShearCaptcha
+ org.dromara.hutool.swing.captcha.CaptchaUtil;
+ org.dromara.hutool.swing.captcha.CircleCaptcha;
+ org.dromara.hutool.swing.captcha.GifCaptcha;
+ org.dromara.hutool.swing.captcha.LineCaptcha;
+ org.dromara.hutool.swing.captcha.ShearCaptcha
  • DateUtil
- cn.hutool.core.date.DateUtil;
+ org.dromara.hutool.core.date.DateUtil;
- cn.hutool.extra.servlet.JakartaServletUtil;
- cn.hutool.http.useragent.UserAgent;
- cn.hutool.http.useragent.UserAgentUtil;
+ org.dromara.hutool.http.server.servlet.JakartaServletUtil;
+ org.dromara.hutool.http.useragent.UserAgent;
+ org.dromara.hutool.http.useragent.UserAgentUtil;
  • IoUtil
- cn.hutool.core.io.IoUtil;
+ org.dromara.hutool.core.io.IoUtil;
- cn.hutool.core.collection.CollUtil;
- cn.hutool.core.util.ArrayUtil;
+ org.dromara.hutool.core.array.ArrayUtil;
+ org.dromara.hutool.core.collection.CollUtil;
  • Tree
- cn.hutool.core.lang.tree.Tree;
- cn.hutool.core.lang.tree.TreeNode;
- cn.hutool.core.lang.tree.TreeUtil;
+ org.dromara.hutool.core.tree.MapTree;
+ org.dromara.hutool.core.tree.TreeNode;
+ org.dromara.hutool.core.tree.TreeUtil;
  • RandomUtil.randomEleList -> RandomUtil.randomEles
- RandomUtil.randomEleList(WORDS, wordCount);
+ RandomUtil.randomEles(WORDS, wordCount);
  • FileUtil.exist -> FileUtil.exists
- FileUtil.exist(file))
+ FileUtil.exists(file))
  • ReflectUtil.setFieldValue -> FieldUtil.setFieldValue
- ReflectUtil.setFieldValue(clientPrincipal, "authorities", authorities);
+ FieldUtil.setFieldValue(clientPrincipal, "authorities", authorities);
  • StrUtil.utf8Bytes -> ByteUtil.toUtf8Bytes
- StrUtil.utf8Bytes(data));
+ ByteUtil.toUtf8Bytes(data));
  • sm2.decryptFromBcd -> sm2.decrypt; sm2.encryptBcd -> sm2.encryptHex
- (sm2.decryptFromBcd(content, KeyType.PrivateKey));
+ (sm2.decrypt(content, KeyType.PrivateKey));
- sm2.encryptBcd(content, KeyType.PublicKey);
+ sm2.encryptHex(content, KeyType.PublicKey);
  • CollUtil.split -> CollUtil.partition
- CollUtil.split(phones, 200);
+ CollUtil.partition(phones, 200);
  • ArrayUtil.toArray 删除

  • AnimatedGifEncoder -> 引入 animated-gif-lib

阿超 添加协作者码匠君
  • IterUtil
- cn.hutool.core.collection.IterUtil
+ org.dromara.hutool.core.collection.iter.IterUtil

弱弱的问一句。。。
虽然我知道需要规范化,统一组织 group
可是换包名真的好吗?
目前我们是把 hutool 作为最基础的 util 放在公司公共包里使用,如果一旦发生包名变更,这个改动难以想象。。

这就是比较无奈的地方了,hutoo 6.x 实际上就是 hutool2,5.x 不能也不推荐直接升级到 6.x,后续我们会在文档上强调这一点的。

可以引入两个版本,然后逐渐过渡更改

ArrayUtil.range()是删除了吗?

考虑出一个兼容包否?用原包类名继承新包类名。提供几个版本的支持,以便逐步过渡。

会着手讨论

6什么时候发布啊。迫不及待用了。听说那个流式操作很秀

感谢关注和认可,我们发布了里程碑版本可以提前尝鲜

LocalDateTimeUtil 是直接删了吗, 有没有什么替代的类呢?

6.x使用TimeUtil

大可不必,我刚试了下,步骤如下:

  1. 导入hutool 6.0的包。
  2. idea会报错,此时你把报错的位置,improt哪里,全局搜索替换为空,直接运行,idea会自己导包进去的。你只需要做部分额外的变更就可以了。idea会自己报错的。
    我用上面的方法不需要多长时间就可以重构了。只需要把一些6x和5x不同的方法列出来即可

ServletUtil中引用的HttpSerlvetRequest是javax中,而OpenJDK18中默认是jakarta,两个不兼容

知道改包名带来的后果了吧, 这把回旋镖打到自己了

感谢对Hutool的关注!

首先 Hutool升级6.x版本修改包名也是一次探索,初衷是希望能解决用户平滑升级难时可以引入两个Hutool版本(5.x和6.x同时存在)

其次 这也符合Dromara开源组织社区治理和统一规范,从“游击队”到“正规军”的路途

顺带一提 Hutool 6.x解决了很多历史遗留问题,还有非常多令人振奋的新特性,也欢迎大家一起来参与开源

感谢反馈,可以新建一个issue供开发团队跟进

可能等到hutool6正式发布后,我们得写一个猥琐的hutool5 Adaptat hutool6的中间层,这样子才能无缝使用。

“猥琐”二字用的挺有意思 :trollface: 到时候可以开源出来,大家一起维护

都到M9了,CHANGELOG.md 没跟同步

正在统计汇总变更

阿超 取消协作者码匠君
阿超 添加协作者阿超
阿超 负责人阿超 修改为码匠君
阿超 取消协作者阿超
阿超 负责人码匠君 修改为阿超

请问TimeInterval是取消了么

6.0.0-M12 版本的 FileUtil.writeFromStream() 这个方法用什么替换?找了半天没找到

FileUtil中没有方法,直接FileWriter.of(existFile).writeFromStream(fileStream.getStream()); 这样吗

有没有群交流下啊,5版本升级到6版本好多都变了,不习惯啊

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(20)
751495 herodotus 1652323005 5611670 henan is unique oldletter 1638888421 1463 loolly admin 1578914022 8994484 aozzl 1710743774 5714667 cheng xing huang 1583648834 11861703 lgy1899 1689598821 131736 virens 1654142798 2320996 bmlt 1605510460
加载更多
Java
1
https://gitee.com/dromara/hutool.git
git@gitee.com:dromara/hutool.git
dromara
hutool
hutool

搜索帮助