mirror of https://github.com/sbt/sbt.git
168 lines
4.4 KiB
Batchfile
168 lines
4.4 KiB
Batchfile
@REM SBT launcher script
|
|
@REM
|
|
@REM Environment:
|
|
@REM JAVA_HOME - location of a JDK home dir (mandatory)
|
|
@REM SBT_OPTS - JVM options (optional)
|
|
@REM Configuration:
|
|
@REM sbtconfig.txt found in the SBT_HOME.
|
|
|
|
@REM ZOMG! We need delayed expansion to build up CFG_OPTS later
|
|
@setlocal enabledelayedexpansion
|
|
|
|
@echo off
|
|
set SBT_HOME=%~dp0
|
|
set SBT_ARGS=
|
|
|
|
rem FIRST we load the config file of extra options.
|
|
set FN=%SBT_HOME%\..\conf\sbtconfig.txt
|
|
set CFG_OPTS=
|
|
FOR /F "tokens=* eol=# usebackq delims=" %%i IN ("%FN%") DO (
|
|
set DO_NOT_REUSE_ME=%%i
|
|
rem ZOMG (Part #2) WE use !! here to delay the expansion of
|
|
rem CFG_OPTS, otherwise it remains "" for this loop.
|
|
set CFG_OPTS=!CFG_OPTS! !DO_NOT_REUSE_ME!
|
|
)
|
|
|
|
rem poor man's jenv (which is not available on Windows)
|
|
IF DEFINED JAVA_HOMES (
|
|
IF EXIST .java-version FOR /F %%A IN (.java-version) DO (
|
|
SET JAVA_HOME=%JAVA_HOMES%\%%A
|
|
SET JDK_HOME=%JAVA_HOMES%\%%A
|
|
)
|
|
)
|
|
rem must set PATH or wrong javac is used for java projects
|
|
IF DEFINED JAVA_HOME SET "PATH=%JAVA_HOME%\bin;%PATH%"
|
|
|
|
rem users can set JAVA_OPTS via .jvmopts (sbt-extras style)
|
|
IF EXIST .jvmopts FOR /F %%A IN (.jvmopts) DO (
|
|
SET JAVA_OPTS=%%A !JAVA_OPTS!
|
|
)
|
|
|
|
rem We use the value of the JAVACMD environment variable if defined
|
|
set _JAVACMD=%JAVACMD%
|
|
|
|
if "%_JAVACMD%"=="" (
|
|
if not "%JAVA_HOME%"=="" (
|
|
if exist "%JAVA_HOME%\bin\java.exe" set "_JAVACMD=%JAVA_HOME%\bin\java.exe"
|
|
)
|
|
)
|
|
|
|
if "%_JAVACMD%"=="" set _JAVACMD=java
|
|
|
|
rem We use the value of the JAVA_OPTS environment variable if defined, rather than the config.
|
|
set _JAVA_OPTS=%JAVA_OPTS%
|
|
if "%_JAVA_OPTS%"=="" set _JAVA_OPTS=%CFG_OPTS%
|
|
|
|
:args_loop
|
|
if "%~1" == "" goto args_end
|
|
|
|
if "%~1" == "-jvm-debug" (
|
|
set JVM_DEBUG=true
|
|
set /a JVM_DEBUG_PORT=5005 2>nul >nul
|
|
) else if "!JVM_DEBUG!" == "true" (
|
|
set /a JVM_DEBUG_PORT=%1 2>nul >nul
|
|
if not "%~1" == "!JVM_DEBUG_PORT!" (
|
|
set SBT_ARGS=!SBT_ARGS! %1
|
|
)
|
|
) else (
|
|
set SBT_ARGS=!SBT_ARGS! %1
|
|
)
|
|
|
|
shift
|
|
goto args_loop
|
|
:args_end
|
|
|
|
if defined JVM_DEBUG_PORT (
|
|
set _JAVA_OPTS=!_JAVA_OPTS! -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=!JVM_DEBUG_PORT!
|
|
)
|
|
|
|
call :process
|
|
|
|
call :checkjava
|
|
|
|
call :copyrt
|
|
|
|
call :sync_preloaded
|
|
|
|
call :run %SBT_ARGS%
|
|
|
|
if ERRORLEVEL 1 goto error
|
|
goto end
|
|
|
|
:run
|
|
|
|
"%_JAVACMD%" %_JAVA_OPTS% %SBT_OPTS% -cp "%SBT_HOME%sbt-launch.jar" xsbt.boot.Boot %*
|
|
goto :eof
|
|
|
|
:process
|
|
rem parses 1.7, 1.8, 9, etc out of java version "1.8.0_91"
|
|
"%_JAVACMD%" -Xmx512M -version 2> "%TEMP%\out.txt"
|
|
set JAVA_VERSION=0
|
|
>nul findstr /c:"version \"9" "%TEMP%\out.txt"
|
|
if /I %ERRORLEVEL% EQU 0 (set JAVA_VERSION=9)
|
|
>nul findstr /c:"version \"1.8" "%TEMP%\out.txt"
|
|
if /I %ERRORLEVEL% EQU 0 (set JAVA_VERSION=1.8)
|
|
>nul findstr /c:"version \"1.7" "%TEMP%\out.txt"
|
|
if /I %ERRORLEVEL% EQU 0 (set JAVA_VERSION=1.7)
|
|
>nul findstr /c:"version \"1.6" "%TEMP%\out.txt"
|
|
if /I %ERRORLEVEL% EQU 0 (set JAVA_VERSION=1.6)
|
|
>nul findstr /c:"version \"1.5" "%TEMP%\out.txt"
|
|
if /I %ERRORLEVEL% EQU 0 (set JAVA_VERSION=1.5)
|
|
exit /B 0
|
|
|
|
:checkjava
|
|
set required_version=1.6
|
|
if /I "%JAVA_VERSION%" GEQ "%required_version%" (
|
|
exit /B 0
|
|
)
|
|
echo.
|
|
echo The java installation you have is not up to date
|
|
echo sbt requires at least version %required_version%+, you have
|
|
echo version %JAVA_VERSION%
|
|
echo.
|
|
echo Please go to http://www.java.com/getjava/ and download
|
|
echo a valid Java Runtime and install before running sbt.
|
|
echo.
|
|
exit /B 1
|
|
|
|
:copyrt
|
|
if /I "%JAVA_VERSION%" GEQ "9" (
|
|
set rtexport="%SBT_HOME%java9-rt-export.jar"
|
|
|
|
"%_JAVACMD%" %_JAVA_OPTS% %SBT_OPTS% -jar "%rtexport%" --rt-ext-dir > "%TEMP%.\rtext.txt"
|
|
set /p java9_ext= < "%TEMP%.\rtext.txt"
|
|
set java9_rt=%java9_ext%\rt.jar
|
|
|
|
if not exist "%java9_rt%" (
|
|
echo Copying runtime jar.
|
|
mkdir "%java9_ext%"
|
|
"%_JAVACMD%" %_JAVA_OPTS% %SBT_OPTS% -jar "%rtexport%" "%java9_rt%"
|
|
)
|
|
set _JAVA_OPTS=!_JAVA_OPTS! -Dscala.ext.dirs="%java9_ext%"
|
|
)
|
|
exit /B 0
|
|
|
|
:sync_preloaded
|
|
set PRELOAD_SBT_JAR="%UserProfile%\.sbt\preloaded\org.scala-sbt\sbt\%INIT_SBT_VERSION%\jars\sbt.jar"
|
|
if /I "%JAVA_VERSION%" GEQ "1.8" (
|
|
where robocopy >nul 2>nul
|
|
if %ERRORLEVEL% equ 0 (
|
|
echo %PRELOAD_SBT_JAR%
|
|
if not exist %PRELOAD_SBT_JAR% (
|
|
if exist "%SBT_HOME%\..\lib\local-preloaded\" (
|
|
echo 'about to robocopy'
|
|
robocopy "%SBT_HOME%\..\lib\local-preloaded" "%UserProfile%\.sbt\preloaded" /E
|
|
)
|
|
)
|
|
)
|
|
)
|
|
exit /B 0
|
|
|
|
:error
|
|
@endlocal
|
|
exit /B 1
|
|
|
|
:end
|
|
@endlocal
|
|
exit /B 0
|