IntelliJ:命令行过长。缩短SBT项目中的“...”的命令行

7
当我试图运行我的应用程序时,IntelliJ开始告诉我:“命令行太长了。为my_app或默认配置缩短命令行。”"my_app"是一个蓝色链接,可以进入“编辑配置”窗口,自动选择并突出显示类路径缩短器的下拉列表。 我选择建议选项,但是没有变化。
我不知道这是什么意思 - 我正在使用Scala,因此我使用一个根本不需要参数的简单对象object MyObj extends App
我尝试添加<property name="dynamic.classpath" value="true" />到workspace.xml中,如其他类似问题所建议的,但无济于事。
在之前,我能够正常运行项目中的程序。但是,什么会导致命令行变得更长呢?命令行中到底放了些什么呢?

1
这可能会有所帮助:https://blog.jetbrains.com/idea/2017/10/intellij-idea-2017-3-eap-configurable-command-line-shortener-and-more/ - Jeto
2
命令行被打印为运行工具窗口中的第一行(默认折叠)。您可以展开它以查看其中包含的内容,其中包括应用程序的类路径等内容。 - yole
4个回答

20

本答案基于 IntelliJ 2020.1.4

  1. 打开配置。通常可以在 Debug/Run 工具栏中找到。
  2. 在配置对话框中,你会发现 Shorten Command Line 选项。那里有不同的模式可供选择。在我的情况下,选择了 JAR Manifest 模式。

你也可以将其设置为下次自动生成测试时的默认值。

进入图片描述


顺便问一下,你知道为什么会发生这种情况吗?命令行过长意味着什么?当选择该选项时,我们改变了什么?谢谢。 - Pedro García Medina
1
我的猜测是,Windows在命令行中的字符总数有一个臭名昭著的限制,即2047个字符(2K-1个字符)。IntelliJ和SBT经常在命令行中打包一堆ENV值。习惯于Unix的人没有这种限制,当在Windows上使用SBT时,就会出现这种意外情况。 - Manabu Tokunaga
从 IntelliJ 2021.2.2 开始(或稍早版本),IntelliJ 将自动为您修复此问题。请在第一次启动调试器时检查警告/建议消息。 - Manabu Tokunaga

3
发现解决方法,这是特定于SBT的。我相信正在发生的是,一个人在他们的build.sbt文件中放置的libaryDependencies实际上会将所有这些依赖项的jar添加到用于运行程序的类路径中。
要解决此问题,请简单地添加 lazy val scriptClasspath = Seq("*")lazy可能是可选的)
到您的build.sbt文件。我将其放置在具有库依赖项的root val之上。不确定是否必须这样做,但如果您遇到麻烦,请移动它。
这样做的效果是,在运行程序时,SBT将那些jar构建的“长”类路径压缩成自己的jar,并仅运行该jar,从而启动所有依赖项和程序。
查看此处以获得更长的演示,以及其他答案。

仍然没有在我的情况下工作,但这很可能也是由于Windows CMD参数限制引起的。在*nix环境中可能会起作用。 - Manabu Tokunaga

1

实际上,我们需要设置短命令行:classpath文件 -

java WrapperClass classpathFile className [args]


0

你需要仔细检查是否引入了许多不相关的依赖项


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接