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 中的命令行