Gradle在Windows 10中产生奇怪的控制字符

21

自从升级到Windows 10后,我在CMD中运行Gradle时,控制台输出的内容很“奇怪”。

[0K
[0K
[2A[1m<==-----------> 18% EXECUTING [9s][m[34D[1B[1m> :compileScala[m[15D[1B[2A[1m<==-----------> 18% EXECUTING [10s][m[35D[2B[2A[1m<==-----------> 18% EXECUTING [11s][m[35D[2B[2A[1m<==-----------> 18% EXECUTING [12s][m[35D[2B[2A[1m<==-----------> 18% EXECUTING [13s][m[35D[2B[2A[1m<==-----------> 18% EXECUTING [14s][m[35D[2B[2Athere were four feature warnings; re-run with -feature for details
four warnings found

我想这可能是控制字符失控了,Gradle试图合理地着色其输出,而Windows却将其解释错误。PowerShell和SBT正常工作,但是从PowerShell复制控制台"属性"设置到CMD并不能解决问题。

有人解决过此问题吗?

更新 2018-01-28 它也发生在我的Jenkins/Alpine/Docker设置中,位于OSX/macOS/whatnot之上。不再仅限于Windows。

... 但是 ... 它在公司给我的Surface笔记本电脑上没有发生 ... 非常奇怪。无论如何,gradlew --console=plain 对我来说很好用。


CMD在运行外部程序时会恢复原始控制台模式,这在技术上是正确的做法。显然PowerShell没有这样做,因此如果您从PowerShell启动CMD,则虚拟终端转义应该可以正常工作——直到有人修复PowerShell中的此错误。 - Eryk Sun
这里的主要问题在于Gradle。如果它依赖虚拟终端支持,则应通过使用GetConsoleMode获取当前模式,然后在ENABLE_VIRTUAL_TERMINAL_PROCESSING标志中进行OR运算,并通过SetConsoleMode设置新模式来在控制台中启用它。如果此操作失败,则不支持VT模式。这可能是Windows的旧版本或设置了使用传统控制台的选项。 - Eryk Sun
6个回答

42

我曾在 Git For Windows 的 Git BASH 中遇到过这种情况。对我来说,解决方案是将 TERM 设置为 cygwin。这样就可以修复输出,而不会引入任何处理退格键的问题。

export TERM=cygwin

我也尝试过 xterm、xterm-256color、ansi 和 vt100。cygwin 终端对我来说是最可靠的。我现在在 Windows 终端中运行 \usr\bin\bash.exe,目前它表现良好。


看起来好像可以用,不过我不明白为什么 Windows 终端环境需要一个 Cygwin TERM。我猜这是 Cygwin 的一种神秘现象。 - xpusostomos
9
如果你在Windows中使用Git Bash,编辑git\etc\bash.bashrc文件,在文件末尾加入以下一行代码:export TERM=cygwin,这样你每次打开终端时就不需要再输入该命令了。 - Ali
1
@Ali的建议对我很有用,当我将其添加到我的Windows主目录下的.bash_profile文件中时。 - Grant Lay
@xpusostomos 可能正在尝试执行此操作:https://en.wikipedia.org/wiki/ANSI_escape_code - Ray Tayek
你可以将这个导出语句放在Git/etc安装文件夹中的bash.bashrc文件中。 我的路径是:C:\Program Files\Git\etc\bash.bashrc - ThangLeQuoc

12

在Windows 10下的PowerShell中,Gradle 2.6可以产生正确的行为,但是Gradle 4.1却不行。 - Καrτhικ
是的,在Windows上通过git bash运行Gradle时也会出现类似的奇怪问题。在Windows的普通DOS终端中,Gradle可以正常工作。正如我所说,您可以使用“--console plain”来停止特殊字符。 - lance-java
看起来它能工作。输出结果更好,但我无法看到百分比%。 像Mark在下面提到的那样使用export TERM=cygwin似乎可以获得更好的结果。 - Ali

1
要在Windows 10上解决此问题,请创建一个新的DWORD键 HKEY_CURRENT_USER\Console\VirtualTerminalLevel ,并将其设置为 1 。有关更多信息,请参见this

1
当使用Windows Terminal和由GIT安装程序自动添加的“Git Bash”配置文件时,我遇到了同样的问题。对我来说,解决方案是将启动终端的命令行从<git_install_path>/bin/bash.exe更改为<git_install_path>/bin/usr/bash.exe,参考this advice

0

就像 @lance-java 所说,可以通过命令行选项 --console 禁用 ANSI 输出

./gradle bootRun --console plain 

或者

./gradle bootRun --console=plain

另一种方法是在gradle.properties文件中设置属性

org.gradle.console=plain 

请查看文档:Gradle配置属性


-1
我的解决方案是更新 Git Bash: git update-git-for-windows

从哪个版本到哪个版本? - starball

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