IDEA 社区版和旗舰版果然还是有-内在区别-的吧

2020-12-23 19:39:30 +08:00
 monetto

在公司开发 Java6 的老项目,团队里有人用了 Lombok,版本是 1.16 。

楼主一直用的社区版+Smart Tomcat 插件开发。奈何动不动就抽风报错,提示找不到符号(1.16 的 Lombok 应该是无法与 IDEA 2020.1 以后的版本配合使用的)。这只是其中一个问题。

还有就是代码本身没问题,然后 IDEA 编译就报错,文件爆红了,结果打开文件,爆红自己一会消失了。无奈。

上面你这两个问题都可以通过使用 Maven 构建解决。但是今天碰到了个问题,SmartTomcat 插件配合 Tomcat8.5 启动一个项目,半天启动不起来,不是报没找到符号,就是报“实际参数列表和形式参数列表长度不同”,JAR 包版本什么都检查过了,最后启动起来了,IDEA 自己又报了个“ModuleUtilCore.findModuleForFile must not be null”,

也启动成功过几次,最后总结就是能不能启动完全看脸...真--迷惑。今天晚上实在启动不起来了,而且身边的同事一直都没这些问题(其他人一直用的旗舰版),遂楼主也试了下旗舰版,一次启动成功...非常轻松....真心跪了。

个人感觉 IDEA 社区版和旗舰版,除了支持 JavaEE 和 Spring 还有 JS 以外...还是有内在区别的...不只是功能上的区别...有了解的大佬吗?

10516 次点击
所在节点    Java
61 条回复
kingfalse
2020-12-24 09:12:35 +08:00
拒绝 lombok 是个好习惯
tinyuu
2020-12-24 10:21:57 +08:00
不拒绝 lombok 是个好习惯
cjh1095358798
2020-12-24 10:33:25 +08:00
java 就是麻烦
hantsy
2020-12-24 11:02:27 +08:00
@chendy 不符合规范,就先去做规范问题。

不能说上厕所的时侯,尿到裤子上了,最后你的归结的原因是那个尿池做得不行。
young1lin
2020-12-24 11:03:10 +08:00
@echo1937 就是他说的这个问题,这是其一,其二是内网开发,不给你装 Lombok 插件。然后项目中有人用,项目是开始时是外网开发的,然后从外网传到内网,转到内网开发的。我得一个个删了 Lombok 的注解,然后再搞。其三,有些人不知道 @Log4j 和 @Slf4j 的区别,搞得打印日志也有问题(我是在东方证券那看到别人内网用 Lombok 这么搞的,我和他解释了两个的区别)。

总之,Lombok 这个“糖”很甜,但小心甜掉牙了。
hantsy
2020-12-24 11:06:02 +08:00
@monetto 如果积累下去,以后升级成本会更高。

这个只要用了 CI/CD 的话,平时依赖环境升级不是什么难事,有时就是切换一下配置而已。

现在很难想像 Java 6 代码长什么样子。个人习惯上,特别是语法上我真不适应 Java 8 以前的啦。
hantsy
2020-12-24 11:07:54 +08:00
@monetto 既然是电商,一般都是烧钱如流水,还在用 Java 6 的,应该已经持续了 10 年了,也不会缺少那么点钱去买 Jetbrains 全套商业协议吧。
wr516516
2020-12-24 11:13:43 +08:00
@young1lin 拷贝个插件安装包离线装呗
hantsy
2020-12-24 11:14:34 +08:00
Lombok 在 IDEA,Eclipse 下都是需要另外安装插件。NetBeans 不需要。

Lombok 是利用 JavaC APT 特性而已,但是各 IDE 在 Java Compiler 上处理不一样,NetBeans 有专门的 Compiler 扩展,Eclipse 有自己 Compiler 。
wr516516
2020-12-24 11:15:01 +08:00
最新版的 spring 和 idea 好像都默认集成 lombok 了
Geekerstar
2020-12-24 11:19:19 +08:00
说 Lombok 有坑的就是自己菜怪工具…
hantsy
2020-12-24 11:22:34 +08:00
@young1lin

生成的 Class 自己的反编译一下就知道,它干了什么东西,再来比较它的 Getter/Setter,难道你的 IDE 生成的垃圾 Getter 和 Setter 还能有什么花样?

一般来讲,我用 Lombok 是非常喜欢用它生成的 Builder,Getter 和 Setter 从来没调用过。

至于替代品,我建议更新 Java 版本用 record 。

https://github.com/hantsy/spring-playground/blob/master/programming-models/webmvc-fn/src/main/java/com/example/demo/DemoApplication.java#L117

或者直接使用 Kotlin 语言,data class 啥也不用写。

https://github.com/hantsy/spring-playground/blob/master/programming-models/webflux-ktco-fn/src/main/kotlin/com/example/demo/DemoApplication.kt#L185
pushback
2020-12-24 11:25:11 +08:00
为啥要一个个删注解呢?找同事导入 jar 插件不行?
echo1937
2020-12-24 11:26:06 +08:00
@hantsy #29 2020.3 版本开始,lombok 内置了,不需要额外安装

@young1lin #25 你这个问题,是环境问题,而非 lombok 问题,

这好比我从 Maven 中央仓库引了一个包,到了内网的私服没这个包或者没有这个版本的,

你照样需要去修改 /删除相关代码,这真不能怪这个包,

JDK 版本 /项目环境 /甚至开发工具,这都属于工程管理问题。

另外就像刚才说的,2020.3 版本开始,不需要额外安装 lombok 插件了。
hantsy
2020-12-24 11:34:23 +08:00
@echo1937 我的 IDEA 好久没重新安装过了,两年了一直都是用 JetBrains Toolbox 管理自动更新。现在内置了 Lombok,这个真不清楚。
hantsy
2020-12-24 11:36:16 +08:00
@echo1937 现在看到有一个 Edu 跟 CE 有什么差别,CE+那个 Edu 插件?
libook
2020-12-24 11:51:10 +08:00
@monetto 任何疑问都可以问 JetBrains 的客服,可以给他们发邮件也可以去 Twitter 上艾特他们。

我问过他们的客服:
1. 个人版可以用于开发商业项目,但仅限于自己使用。
2. 个人设备安装数量无限制,但是不能同时在多个设备上使用。我的设备超多,且一台 PC 可能都有三系统环境,都装了 IDEA 登录了账号,没出现过被封或不能用的情况。
hantsy
2020-12-24 11:57:32 +08:00
@wr516516 Spring 内置?你是说 Spring Boot ?还是 Spring 核心框架? Spring 核心,我个人觉得可能性不大,Spring 一直在避免第三方依赖,Spring 5.0 重新写了一个日志抽象( spring-jcl )去掉了 Apache Commons Logging 依赖。

据我知道,Spring Cloud 从一开始就添加了 Lombok 依赖。Spring Boot,没注意最新版本 2.4 的新特性有这个说明,之前是肯定没有 Lombok 依赖的,我一直都是手动添加了依赖。
Hurriance
2020-12-24 12:06:17 +08:00
用过 lombok,侵入性强,说 lombok 不坑的怕是没有因为这个出现过问题,出过问题你就知道多难排查这个坑
hantsy
2020-12-24 13:03:58 +08:00
@Hurriance Lombok 是零入侵的。仅仅是编译时需要,运行时根本不需要。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/738373

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX