我正在运行 Windows 10 的最新版本(昨天更新),由于未知原因,我无法启动Maven再也没有了,Windows(PowerShell 和命令提示符)给我“命令语法不正确”——而我并没有在 maven 中更改任何内容。我也下载了最新版本,同样的问题。
可能与最近的 Windows 更新有关(2021 年 9 月 14 日 - KB5005565(操作系统内部版本 19041.1237、19042.1237 和 19043.1237),不确定,但它运行了好几年都没有问题,而且问题出现在更新出现在我的系统上的同一天(尽管在我实际更新和重新启动之前)。
脚本如下所示...
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%"=="on" echo %MAVEN_BATCH_ECHO%
@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%"=="" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %*
:skipRcPre
@setlocal
set ERROR_CODE=0
@REM ==== START VALIDATION ====
if not "%JAVA_HOME%"=="" goto OkJHome
for %%i in (java.exe) do set "JAVACMD=%%~$PATH:i"
goto checkJCmd
:OkJHome
set "JAVACMD=%JAVA_HOME%\bin\java.exe"
:checkJCmd
if exist "%JAVACMD%" goto chkMHome
我尝试切换到@echo=on
以获得一些可能失败的输出,但这对我没什么帮助。当从其文件夹运行脚本时(以避免任何路径问题),输出似乎表明 SET ... 命令是问题所在。当使用 运行(从同一文件夹)时@echo=on
,脚本会产生以下输出:
C:\[..]\apache-maven-3.8.2\bin>.\mvn
C:\[..]\apache-maven-3.8.2\bin>if not "" == "" goto skipRcPre
C:\[..]\apache-maven-3.8.2\bin>if exist "C:\Users\Flo\mavenrc_pre.bat" call "C:\Users\Flo\mavenrc_pre.bat"
C:\[..]\apache-maven-3.8.2\bin>if exist "C:\Users\Flo\mavenrc_pre.cmd" call "C:\Users\Flo\mavenrc_pre.cmd"
C:\[..]\apache-maven-3.8.2\bin>set ERROR_CODE=0
The syntax of the command is incorrect.
C:\[..]\apache-maven-3.8.2\bin>if not "C:\Program Files\Java\jdk-11.0.10""=="" goto OkJHome
C:\[..]\apache-maven-3.8.2\bin>
奇怪的是,set ERROR_CODE=0
在控制台中手动调用没有显示任何错误。
最近更新:
- 2021 年 9 月 14 日 - KB5005565(操作系统内部版本 19041.1237、19042.1237 和 19043.1237)
- KB4023057
- 2021 年 8 月 10 日 - KB5005033(操作系统内部版本 19041.1165、19042.1165 和 19043.1165)......现在我们已经回来 1 个多月了,它一直运行到前天。
答案1
无论出于什么原因,显示错误的行实际上是这一行,而不是输出之前的那一行:
C:\[..]\apache-maven-3.8.2\bin>if not "C:\Program Files\Java\jdk-11.0.10""=="" goto OkJHome
路径末尾有两个双引号,而不只是一个。这很可能是由于我错误地尝试将 JAVA_HOME 设置为以双引号结尾但未以双引号开头的内容,这显然是我的错。
看来更新纯属巧合,在同一时间段,一个美好的错误现实就呈现在我眼前,啧啧。