@REM ---------------------------------------------------------------------------- @REM 此注释块表明该文件遵循 Apache 软件基金会的许可协议 @REM Licensed to the Apache Software Foundation (ASF) under one @REM 可能有一个或多个贡献者与 ASF 签订了许可协议 @REM or more contributor license agreements. See the NOTICE file @REM 查看随此项目一同分发的 NOTICE 文件,获取更多版权信息 @REM distributed with this work for additional information @REM 关于版权归属的详细信息 @REM regarding copyright ownership. The ASF licenses this file @REM ASF 根据 Apache 许可证 2.0 版本将此文件授权给你 @REM to you under the Apache License, Version 2.0 (the @REM "License"); you may not use this file except in compliance @REM 除非你遵守该许可协议,否则不能使用此文件 @REM with the License. You may obtain a copy of the License at @REM 你可以在下面的链接获取许可协议副本 @REM https://www.apache.org/licenses/LICENSE-2.0 @REM @REM Unless required by applicable law or agreed to in writing, @REM 除非适用法律要求或书面同意 @REM software distributed under the License is distributed on an @REM 根据许可协议分发的软件按“原样”分发 @REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @REM 不附带任何形式的明示或暗示保证和条件 @REM KIND, either express or implied. See the License for the @REM 查看许可协议以了解相关权限和限制的具体条款 @REM specific language governing permissions and limitations @REM under the License. @REM ---------------------------------------------------------------------------- @REM ---------------------------------------------------------------------------- @REM 此注释块介绍了这是一个 Maven2 的启动批处理脚本 @REM Maven2 Start Up Batch script @REM @REM Required ENV vars: @REM 必需的环境变量 @REM JAVA_HOME - location of a JDK home dir @REM JAVA_HOME 环境变量,指向 JDK 的安装目录 @REM @REM Optional ENV vars @REM 可选的环境变量 @REM M2_HOME - location of maven2's installed home dir @REM M2_HOME 环境变量,指向 Maven2 的安装目录 @REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands @REM MAVEN_BATCH_ECHO 环境变量,设置为 'on' 可启用批处理命令的回显 @REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending @REM MAVEN_BATCH_PAUSE 环境变量,设置为 'on' 可在脚本结束前等待按键 @REM MAVEN_OPTS - parameters passed to the Java VM when running Maven @REM MAVEN_OPTS 环境变量,用于在运行 Maven 时传递给 Java 虚拟机的参数 @REM e.g. to debug Maven itself, use @REM 例如,要调试 Maven 本身,可使用以下设置 @REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 @REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files @REM MAVEN_SKIP_RC 环境变量,用于禁用加载 mavenrc 文件的标志 @REM ---------------------------------------------------------------------------- @REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' @REM 以 '@' 开头的 REM 行,防止在 MAVEN_BATCH_ECHO 为 'on' 时回显注释 @echo off @REM 关闭命令回显,避免在执行脚本时显示命令本身 @REM set title of command window @REM 设置命令窗口的标题 title %0 @REM 将命令窗口的标题设置为当前脚本的名称 @REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' @REM 通过将 MAVEN_BATCH_ECHO 设置为 'on' 来启用命令回显 @if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% @REM 如果 MAVEN_BATCH_ECHO 环境变量的值为 'on',则开启命令回显 @REM set %HOME% to equivalent of $HOME @REM 将 %HOME% 环境变量设置为与 $HOME 等效的值 if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") @REM 如果 %HOME% 环境变量未设置,则将其设置为当前用户的主目录 @REM Execute a user defined script before this one @REM 在执行此脚本之前执行用户定义的脚本 if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre @REM 如果 MAVEN_SKIP_RC 环境变量不为空,则跳过执行用户定义的前置脚本 @REM check for pre script, once with legacy .bat ending and once with .cmd ending @REM 检查是否存在前置脚本,分别检查以 .bat 和 .cmd 结尾的文件 if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" @REM 如果存在 %HOME%\mavenrc_pre.bat 文件,则调用该脚本 if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" @REM 如果存在 %HOME%\mavenrc_pre.cmd 文件,则调用该脚本 :skipRcPre @REM 跳过执行用户定义的前置脚本的标签 @setlocal @REM 开启本地环境变量作用域,确保后续设置的变量只在当前脚本块内有效 set ERROR_CODE=0 @REM 初始化错误代码为 0,表示脚本执行正常 @REM To isolate internal variables from possible post scripts, we use another setlocal @REM 为了将内部变量与可能的后置脚本隔离开,我们再次使用 setlocal @setlocal @REM ==== START VALIDATION ==== @REM 开始验证环境变量 if not "%JAVA_HOME%" == "" goto OkJHome @REM 如果 JAVA_HOME 环境变量已设置,则跳转到 OkJHome 标签 echo. echo Error: JAVA_HOME not found in your environment. >&2 @REM 输出错误信息,提示 JAVA_HOME 环境变量未找到 echo Please set the JAVA_HOME variable in your environment to match the >&2 @REM 提示用户设置 JAVA_HOME 环境变量 echo location of your Java installation. >&2 @REM 提示用户将 JAVA_HOME 设置为 Java 安装目录 echo. goto error @REM 跳转到 error 标签,处理错误情况 :OkJHome @REM JAVA_HOME 环境变量已设置的标签 if exist "%JAVA_HOME%\bin\java.exe" goto init @REM 如果 JAVA_HOME\bin\java.exe 文件存在,则跳转到 init 标签 echo. echo Error: JAVA_HOME is set to an invalid directory. >&2 @REM 输出错误信息,提示 JAVA_HOME 设置为无效目录 echo JAVA_HOME = "%JAVA_HOME%" >&2 @REM 显示当前 JAVA_HOME 的值 echo Please set the JAVA_HOME variable in your environment to match the >&2 @REM 提示用户设置正确的 JAVA_HOME 环境变量 echo location of your Java installation. >&2 @REM 提示用户将 JAVA_HOME 设置为 Java 安装目录 echo. goto error @REM 跳转到 error 标签,处理错误情况 @REM ==== END VALIDATION ==== @REM 结束环境变量验证 :init @REM 初始化标签 @REM Find the project base dir, i.e. the directory that contains the folder ".mvn". @REM 查找项目的基础目录,即包含 .mvn 文件夹的目录 @REM Fallback to current working directory if not found. @REM 如果未找到,则使用当前工作目录作为基础目录 set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% @REM 将 MAVEN_PROJECTBASEDIR 环境变量设置为 MAVEN_BASEDIR 的值 IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir @REM 如果 MAVEN_PROJECTBASEDIR 环境变量不为空,则跳转到 endDetectBaseDir 标签 set EXEC_DIR=%CD% @REM 将 EXEC_DIR 环境变量设置为当前工作目录 set WDIR=%EXEC_DIR% @REM 将 WDIR 环境变量设置为当前工作目录 :findBaseDir @REM 查找基础目录的标签 IF EXIST "%WDIR%"\.mvn goto baseDirFound @REM 如果当前目录下存在 .mvn 文件夹,则跳转到 baseDirFound 标签 cd .. @REM 切换到上一级目录 IF "%WDIR%"=="%CD%" goto baseDirNotFound @REM 如果已经到达根目录,则跳转到 baseDirNotFound 标签 set WDIR=%CD% @REM 更新 WDIR 环境变量为当前目录 goto findBaseDir @REM 继续查找基础目录 :baseDirFound @REM 找到基础目录的标签 set MAVEN_PROJECTBASEDIR=%WDIR% @REM 将 MAVEN_PROJECTBASEDIR 环境变量设置为找到的基础目录 cd "%EXEC_DIR%" @REM 切换回原来的工作目录 goto endDetectBaseDir @REM 跳转到 endDetectBaseDir 标签 :baseDirNotFound @REM 未找到基础目录的标签 set MAVEN_PROJECTBASEDIR=%EXEC_DIR% @REM 将 MAVEN_PROJECTBASEDIR 环境变量设置为当前工作目录 cd "%EXEC_DIR%" @REM 切换回原来的工作目录 :endDetectBaseDir @REM 结束基础目录检测的标签 IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig @REM 如果 %MAVEN_PROJECTBASEDIR%\.mvn\jvm.config 文件不存在,则跳转到 endReadAdditionalConfig 标签 @setlocal EnableExtensions EnableDelayedExpansion @REM 开启扩展和延迟环境变量扩展 for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a @REM 读取 %MAVEN_PROJECTBASEDIR%\.mvn\jvm.config 文件的内容,并将其添加到 JVM_CONFIG_MAVEN_PROPS 环境变量中 @endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% @REM 结束本地环境变量作用域,并将 JVM_CONFIG_MAVEN_PROPS 环境变量传递到外部 :endReadAdditionalConfig @REM 结束读取额外配置文件的标签 SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" @REM 设置 MAVEN_JAVA_EXE 环境变量为 Java 可执行文件的路径 set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" @REM 设置 WRAPPER_JAR 环境变量为 Maven 包装器 JAR 文件的路径 set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain @REM 设置 WRAPPER_LAUNCHER 环境变量为 Maven 包装器的主类名 set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar" @REM 设置 DOWNLOAD_URL 环境变量为 Maven 包装器 JAR 文件的下载地址 FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B ) @REM 读取 %MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties 文件,查找 wrapperUrl 属性,并更新 DOWNLOAD_URL 环境变量 @REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central @REM 扩展功能,允许自动从 Maven 中央仓库下载 maven-wrapper.jar 文件 @REM This allows using the maven wrapper in projects that prohibit checking in binary data. @REM 这允许在禁止提交二进制数据的项目中使用 Maven 包装器 if exist %WRAPPER_JAR% ( if "%MVNW_VERBOSE%" == "true" ( echo Found %WRAPPER_JAR% ) ) else ( if not "%MVNW_REPOURL%" == "" ( SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar" ) if "%MVNW_VERBOSE%" == "true" ( echo Couldn't find %WRAPPER_JAR%, downloading it ... echo Downloading from: %DOWNLOAD_URL% ) powershell -Command "&{"^ "$webclient = new-object System.Net.WebClient;"^ "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ "}"^ "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ "}" if "%MVNW_VERBOSE%" == "true" ( echo Finished downloading %WRAPPER_JAR% ) ) @REM End of extension @REM 扩展功能结束 @REM Provide a "standardized" way to retrieve the CLI args that will @REM 提供一种“标准化”的方式来获取命令行参数 @REM work with both Windows and non-Windows executions. @REM 适用于 Windows 和非 Windows 系统的执行环境 set MAVEN_CMD_LINE_ARGS=%* @REM 将 MAVEN_CMD_LINE_ARGS 环境变量设置为所有命令行参数 %MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* @REM 执行 Java 命令,启动 Maven 包装器 if ERRORLEVEL 1 goto error @REM 如果执行 Java 命令返回错误码,则跳转到 error 标签 goto end @REM 跳转到 end 标签 :error @REM 错误处理标签 set ERROR_CODE=1 @REM 设置错误代码为 1,表示脚本执行出错 :end @REM 结束标签 @endlocal & set ERROR_CODE=%ERROR_CODE% @REM 结束本地环境变量作用域,并将错误代码传递到外部 if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost @REM 如果 MAVEN_SKIP_RC 环境变量不为空,则跳过执行用户定义的后置脚本 @REM check for post script, once with legacy .bat ending and once with .cmd ending @REM 检查是否存在后置脚本,分别检查以 .bat 和 .cmd 结尾的文件 if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" @REM 如果存在 %HOME%\mavenrc_post.bat 文件,则调用该脚本 if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" @REM 如果存在 %HOME%\mavenrc_post.cmd 文件,则调用该脚本 :skipRcPost @REM 跳过执行用户定义的后置脚本的标签 @REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' @REM 如果 MAVEN_BATCH_PAUSE 环境变量设置为 'on',则暂停脚本执行 if "%MAVEN_BATCH_PAUSE%" == "on" pause @REM 等待用户按键 if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% @REM 如果 MAVEN_TERMINATE_CMD 环境变量设置为 'on',则退出命令提示符并返回错误代码 exit /B %ERROR_CODE% @REM 退出当前批处理脚本并返回错误代码