又一次被idea坑了(Shorten command line)

程序员 2024-9-13 22:28:24 73 0 来自 中国
Idea在Java IDE范畴的职位,它说第二,估计没人敢说第二。确实好用,但是如果你不深入相识一些他的设置的话,各种诡异的题目就会接踵而来。
如之前的Enbale launch optimization引发的题目Java class被提前加载之深度历险记。这次我们来看一下Shorten command line引发的题目
0. 题目配景

在正式进入题目之前,我先简朴形貌一下配景。我司基于javaagent做了一套字节码插件平台。如果各人有相识过Skywalking的话,那根本上跟这个差不多,只不外我们这个字节码平台的特色就是:

  • Easy Development
  • Easy Management
基于此平台,我司构建了一整套声明式API,把API与实现分离,彻底解耦了业务研发与中心件研发,使得中心件研发可以独立迭代,不再依赖于业务方。
这个不是我们这次分享的重点,详细是怎样做的,下次再分享。
1. 为什么就我本地不可?

我们的声明式API逐步在公司内推广,我们碰到了各种诡异的题目。本日这个题目算是此中一个。下面我们简朴往返顾一下这个题目的Everything
某天下战书:
研发A:我本地开辟的时间,你们的API貌似没有见效
我们【自尊满满】:请发一下你的启动日志
研发A发完启动日志后
我们【自尊满满】:你这显着没有利用我们的idea插件
研发A去安装完插件,又来找我们
研发A:还是不可啊,主要题目是我们dev情况上是没题目
我们:那其他人本地开辟有题目吗
研发A:其他人貌似没啥题目,就我本地开辟的时间有题目
我们【重启工程师】:这个科学已经没法表明了,你要不你重启一下idea,大概重启一下电脑试下呢
过了10分钟后
研发A:大佬,还是不可啊
一样寻常剧情走到这里的话,我们有两个选择:

  • 1这人的情况有题目,大概这人有题目,反正不管我们的事,让他本身去搞吧
  • 2我们API是不是有题目,得debug看看

原来我是想选第一种方案的,怎样我还没选择好,人家已经搬着电脑来找我了。
我本可以义正严词地告诉他,肯定是你的电脑有题目,要不你换台电脑?还没等我说出口,想着为(dui)公(fang)司(shi)节(mei)省(zi)资本,算了,大概看一下缘故起因吧。
2. 尴尬了:我也不知道为啥

既然为(dui)公(fang)司(shi)节(mei)省(zi)资本,那就debug吧。这不debug还好,一debug发现我们的实现的代码都没有走到断点处,我立马就开始猜疑人生了,这怎么大概呢,已经运行了这么长的时间了,怎么大概连功能都没有见效呢?

然后氛围立马就尴尬了起来,氛围就有点雷同于剃头店的场景:
徐志胜:这发型丑,也不能全怪他
剃头师:这发型丑,也有大概是我技能不精
研发A:这个不见效,也不肯定是他的题目
我:这个题目有大概是我们的bug
然后,尴尬的氛围大概连续了几分钟后,那人有事先走了,把电脑留下了。
再然后,我突然之前强总貌似碰到过雷同的一些题目,就轻描淡写地问了一句,然后他说,你把idea的那个运行参数修改成xxx试试看呢?
至于是啥,我们下面再说。
但是结果就是,我把idea的运行参数修改成他说的那个参数之后,确实就好了。
3. 到底修改idea的啥设置了?

那上面提到的idea参数到底是啥呢?
Look一下,就是下面的这个参数Shorten command line
我信赖大多数人大概都没有注意到这个参数,一样寻常都利用的是idea默认的选项,只有出现题目的时间,会百度一下看看咋搞。
如下面的最为经典的题目:Command line is too long,然后我们就会百度一下,找一篇文章看一下怎样办理。好比这篇文章办理: Intellij IDEA 运行报错 Command line is too long
那在我们这个场景下,出题目的是哪一个选项呢?
Shorten command line:classpath file有题目,其他的选项都没有任何题目。
[图片上传失败...(image-4904ee-1649646754607)]
4. Shorten command line到底是个啥

那这玩意到底个啥呢?跟我们的题目又有什么关系呢?
啥关系我们先不聊,我们先来看看这到底是个啥玩意。然后我们再看是啥关系。
Shorten command line:收缩下令行
那到底收缩什么下令行,又为什么要收缩,每一个选项的详细寄义是啥呢?
我们先去官网Look Look
idea help doc
7.png 我们恣意看一个文档Run/Debug Configuration


那到底在说呢?各人可以本身用翻译软件翻译一下,这里我就不翻译了,大抵意思如下:
classpath有大概很长。如果不收缩的话,那么JVM启动下令有大概由于classpath太长导致高出了操纵体系的允许的最长下令参数长度,从而导致启动失败。以是这里有3种方式可以来收缩classpath的长度,进而收缩JVM启动的参数。
3种选项的意思如下:

  • none:不会收缩classptah。如果下令行参数长度高出了操纵体系的限定,那么idea就不会运行应用,然后会体现一个提示语来发起你收缩下令行长度
  • JAR manifest:idea会把classpath写入暂时天生的classpath.jar中的manifest文件中
  • classpath file: idea将把一个长classpath写入一个文本文件
第一种比力轻易明确,就是不收缩下令行长度。但是第二种和第三种到底是个什么东东?就每一字都熟悉,但是就是不知道啥意思的感觉。
5. 深入明确Shorten command line

我们要想彻底明确Shorten command line几个选项的详细寄义,还须要启动看一下,到底有什么不一样。
搞起来,我们先demo走起:如下,搞一个简朴的maven工程,内里就一个依赖
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-22 22:56, Processed in 0.161698 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表