IntelliJ:命令行太长。在 SBT 项目中缩短...的命令行

Posted

技术标签:

【中文标题】IntelliJ:命令行太长。在 SBT 项目中缩短...的命令行【英文标题】:IntelliJ: Command Line is too Long. Shorten command line for... in SBT project 【发布时间】:2018-08-08 21:56:59 【问题描述】:

当我尝试运行我的应用程序时,IntelliJ 刚刚开始告诉我

“命令行太长。缩短 my_app 或应用程序默认配置的命令行。”

my_app 是一个蓝色链接,它通向“编辑配置”窗口,自动选择并突出显示类路径缩短器的下拉菜单。我选择了建议的选项,但没有变化。

我不知道这意味着什么——我使用的是 Scala,所以我使用了一个简单的 object MyObj extends App,它根本不接受任何参数。

我尝试按照其他类似问题的建议将<property name="dynamic.classpath" value="true" /> 添加到workspace.xml,但无济于事。

我以前可以很好地在我的项目中运行我的程序。但是什么会延长命令行呢?命令行上到底放了什么?

【问题讨论】:

This 可能会有所帮助。 命令行打印为运行工具窗口的第一行(默认折叠)。您可以展开它以查看其中包含的确切内容;除其他外,它包含您的应用程序的类路径。 【参考方案1】:

找到了解决方法,这是特定于 SBT 的。我相信正在发生的事情是 libaryDependencies 放入他们的 build.sbt 文件实际上将这些依赖项的所有 jar 添加到用于运行程序的类路径中。

要解决这个问题,只需添加

lazy val scriptClasspath = Seq("*")lazy 可能是可选的)

到您的 build.sbt 文件。我将我的放在root val 之上,并带有库依赖项。不确定这是否有必要,但如果遇到问题,请转移它

这样做的目的是在运行程序时,SBT 会将这些 jar 构建的“长”类路径压缩到它自己的 jar 中,然后运行该 jar,这将启动所有依赖项和程序。

查看this 以获得更长的演示以及其他答案

【讨论】:

在我的情况下仍然不起作用,但这也可能是由于 Windows CMD 参数限制。可能会在 *nix 环境中工作。【参考方案2】:

此答案基于 IntelliJ 2020.1.4

    打开配置。这通常位于“调试/运行”工具栏中。 您将在“配置”对话框中找到“缩短命令行”项。您可以在那里选择不同的模式。就我而言,JAR Manifiest 有效。

您也可以在下次自动生成测试时将此设置为默认值。

【讨论】:

顺便说一句,你知道为什么会这样吗?命令行太长是什么意思?而且,在选择该选项时,我们改变了什么?谢谢 我的猜测,但 Windows 对命令行中的字符总数有一个臭名昭著的限制,即 2047 = 2K-1 个字符。 IntelliJ 和 SBT 经常在命令行中打包一堆 ENV 值。习惯 Unix 的人没有这个限制,在 Windows 上使用 SBT 时会发生这种类型的惊喜。 从 IntelliJ 2021.2.2(或更早版本)开始,IntelliJ 将自动为您解决此问题。请在第一次启动调试器时检查警告/建议消息。【参考方案3】:

其实我们需要设置 Shorten command line: classpath file -

java WrapperClass classpathFile className [args]

【讨论】:

以上是关于IntelliJ:命令行太长。在 SBT 项目中缩短...的命令行的主要内容,如果未能解决你的问题,请参考以下文章

Intellij 10.8 命令行太长。缩短 Maven 中的命令行

IDEA 10.5 命令行太长

Kafka 输入行太长 命令语法不正确

Windows安装部署yahoo的cmak运行时报错:输入行太长,命令语法不正确

启动kafka时输入行太长

在IntelliJ中调试sbt项目