maven,编译,代码过长

当使用 Maven 打包一个包含超过一万行的枚举类时,出现‘代码过长’错误。问题源于 Javac 编译器的限制,而非枚举本身的限制。解决方案包括在 Maven 的 compiler plugin 中更改编译器配置或在 IDE 中预编译后,让 Maven 只负责打包,通过添加 '-Dmaven.main.skip' 参数跳过编译检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原来的项目经理在系统里写了个一万多行的枚举类。。。

用eclipse可以正常启动运作,但是用maven打包就会报错:代码过长。

有很多说法,但是我发现的最有价值的是这一段:

https://stackoverflow.com/questions/2546470/enum-exeeding-the-65535-bytes-limit-of-static-initializer-whats-best-to-do

Methods are not limited to 64K. There are other problems, such as that the exception table can only cover 64K, and that the most common jump instructions jump with 16 bits integers. But an enum static initializer doesn't need exception handlers and a better compiler knows to generate wide jump instructions. So it's really a limitation in Javac (number of enum constants - not in general), that can be fixed by just fixing javac. 

就是说enum不受64k的约束,聪明的编译器能绕过这个问题。

而maven默认值用了javac编译,没有对这里做优化,于是报错。

解决方法:

要么在maven配置中修改compiler plugin配置,换为其他编译器(然而我尝试之后还是不行)

要么直接在IDE里编译好,maven只负责打包,不要重复编译(在运行参数中加入-Dmaven.main.skip跳过编译检查)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值