From f77c15496b18324e893f7ba3c43f5c78433d3833 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Wed, 15 Feb 2017 04:57:47 -0500 Subject: [PATCH 1/6] add JDK 9 support --- .java-version | 1 + build.sbt | 18 ++++++- .../github/retronym/java9rtexport/Copy.java | 49 +++++++++++++++++++ .../github/retronym/java9rtexport/Export.java | 48 ++++++++++++++++++ src/universal/bin/sbt-launch-lib.bash | 32 +++++++++++- 5 files changed, 146 insertions(+), 2 deletions(-) create mode 100644 .java-version create mode 100644 java9-rt-export/src/main/java/io/github/retronym/java9rtexport/Copy.java create mode 100644 java9-rt-export/src/main/java/io/github/retronym/java9rtexport/Export.java diff --git a/.java-version b/.java-version new file mode 100644 index 000000000..625934097 --- /dev/null +++ b/.java-version @@ -0,0 +1 @@ +1.8 diff --git a/build.sbt b/build.sbt index 0e92dbc20..b3721d359 100644 --- a/build.sbt +++ b/build.sbt @@ -105,7 +105,11 @@ val root = (project in file(".")). // Universal ZIP download install. packageName in Universal := packageName.value, // needs to be set explicitly due to a bug in native-packager version in Universal := sbtVersionToRelease, - mappings in Universal <+= sbtLaunchJar map { _ -> "bin/sbt-launch.jar" }, + mappings in Universal ++= { + val launchJar = sbtLaunchJar.value + val rtExportJar = (packageBin in Compile in java9rtexport).value + Seq(launchJar -> "bin/sbt-launch.jar", rtExportJar -> "bin/java9-rt-export.jar") + }, // Misccelaneous publishing stuff... projectID in Debian <<= moduleID, @@ -117,6 +121,18 @@ val root = (project in file(".")). projectID in Universal <<= moduleID ) +lazy val java9rtexport = (project in file("java9-rt-export")) + .settings( + name := "java9-rt-export", + autoScalaLibrary := false, + crossPaths := false, + description := "Exports the contents of the Java 9. JEP-220 runtime image to a JAR for compatibility with older tools.", + homepage := Some(url("http://github.com/retronym/" + name.value)), + startYear := Some(2017), + licenses += ("Scala license", url(homepage.value.get.toString + "/blob/master/LICENSE")), + mainClass in Compile := Some("io.github.retronym.java9rtexport.Export") + ) + def downloadUrlForVersion(v: String) = (v split "[^\\d]" flatMap (i => catching(classOf[Exception]) opt (i.toInt))) match { case Array(0, 11, 3, _*) => "http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/sbt-launch/0.11.3-2/sbt-launch.jar" case Array(0, 11, x, _*) if x >= 3 => "http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/sbt-launch/"+v+"/sbt-launch.jar" diff --git a/java9-rt-export/src/main/java/io/github/retronym/java9rtexport/Copy.java b/java9-rt-export/src/main/java/io/github/retronym/java9rtexport/Copy.java new file mode 100644 index 000000000..31c7e95d7 --- /dev/null +++ b/java9-rt-export/src/main/java/io/github/retronym/java9rtexport/Copy.java @@ -0,0 +1,49 @@ +package io.github.retronym.java9rtexport; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.file.*; +import java.nio.file.attribute.*; +import java.util.EnumSet; + +import static java.nio.file.StandardCopyOption.COPY_ATTRIBUTES; +import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; + +public class Copy { + public static void copyDirectory(final Path source, final Path target) + throws IOException { + Files.walkFileTree(source, EnumSet.of(FileVisitOption.FOLLOW_LINKS), + Integer.MAX_VALUE, new FileVisitor() { + + @Override + public FileVisitResult preVisitDirectory(Path dir, + BasicFileAttributes sourceBasic) throws IOException { + + String relative = source.relativize(dir).toString(); + if (!Files.exists(target.getFileSystem().getPath(relative))) + Files.createDirectory(target.getFileSystem().getPath(relative)); + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult visitFile(Path file, + BasicFileAttributes attrs) throws IOException { + String relative = source.relativize(file).toString(); + Files.copy(file, target.getFileSystem().getPath(relative), COPY_ATTRIBUTES, REPLACE_EXISTING); + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult visitFileFailed(Path file, IOException e) throws IOException { + throw e; + } + + @Override + public FileVisitResult postVisitDirectory(Path dir, IOException e) throws IOException { + if (e != null) throw e; + return FileVisitResult.CONTINUE; + } + }); + } + +} diff --git a/java9-rt-export/src/main/java/io/github/retronym/java9rtexport/Export.java b/java9-rt-export/src/main/java/io/github/retronym/java9rtexport/Export.java new file mode 100644 index 000000000..eee31ce46 --- /dev/null +++ b/java9-rt-export/src/main/java/io/github/retronym/java9rtexport/Export.java @@ -0,0 +1,48 @@ +package io.github.retronym.java9rtexport; + +import java.io.IOException; +import java.net.URI; +import java.nio.file.*; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +public class Export { + public static void main(String[] args) { + try { + + if (args.length == 0) { + System.err.println("Usage:"); + System.err.println(" java -jar java9-rt-export-*.jar $HOME/.sbt/java9-rt-ext/rt.jar"); + System.err.println(" Exports rt.jar to the specified path."); + System.err.println(""); + System.err.println(" java -jar java9-rt-export-*.jar --global-base"); + System.err.println(" Prints sbt global base."); + System.exit(-1); + } + String destination = args[0]; + if (destination.equals("--global-base")) { + Path defaultGlobalBase = Paths.get(System.getProperty("user.home"), ".sbt", "0.13"); + String globalBase = System.getProperty("sbt.global.base", defaultGlobalBase.toString()); + System.out.println(globalBase); + System.exit(0); + } + FileSystem fileSystem = FileSystems.getFileSystem(URI.create("jrt:/")); + Path path = fileSystem.getPath("/modules"); + Path destPath = Paths.get(destination); + URI uri = URI.create( "jar:" + destPath.toUri() ); + Map env = new HashMap<>(); + env.put( "create", "true" ); + try ( FileSystem zipfs = FileSystems.newFileSystem( uri, env ) ) { + Iterator iterator = Files.list(path).iterator(); + while(iterator.hasNext()) { + Path next = iterator.next(); + Copy.copyDirectory(next, zipfs.getPath("/")); + } + } + } catch (IOException e) { + e.printStackTrace(); + System.exit(-1); + } + } +} diff --git a/src/universal/bin/sbt-launch-lib.bash b/src/universal/bin/sbt-launch-lib.bash index 6b73f7f28..f51460a2a 100755 --- a/src/universal/bin/sbt-launch-lib.bash +++ b/src/universal/bin/sbt-launch-lib.bash @@ -38,6 +38,10 @@ acquire_sbt_jar () { fi } +rt_export_file () { + echo "${sbt_bin_dir}/java9-rt-export.jar" +} + execRunner () { # print the arguments one to a line, quoting any containing spaces [[ $verbose || $debug ]] && echo "# Executing command line:" && { @@ -147,8 +151,16 @@ process_args () { process_my_args "${myargs[@]}" } - java_version=$("$java_cmd" -Xmx512M -version 2>&1 | sed 's/.*version "\([0-9]*\)\.\([0-9]*\)\..*"/\1.\2/; 1q') + ## parses 1.7, 1.8, 9, etc out of java version "1.8.0_91" + java_version=$("$java_cmd" -Xmx512M -version 2>&1 | sed 's/.*version "\([0-9]*\)\(\.[0-9]*\)\{0,1\}\(.*\)*"/\1\2/; 1q') vlog "[process_args] java_version = '$java_version'" + rtexport=$(rt_export_file) + sbt_global_dir=$("$java_cmd" ${JAVA_OPTS} ${SBT_OPTS:-$default_sbt_opts} ${java_args[@]} \ + -jar "$rtexport" --global-base) + java9_ext=$(echo "$sbt_global_dir/java9-rt-ext") + java9_rt=$(echo "$java9_ext/rt.jar") + vlog "[process_args] sbt_global_dir = '$sbt_global_dir'" + vlog "[process_args] java9_rt = '$java9_rt'" } # Detect that we have java installed. @@ -174,6 +186,21 @@ checkJava() { fi } +copyRt() { + if [[ "$java_version" > "8" ]] && [[ ! -f "$java9_rt" ]]; then + echo Copying runtime jar. + execRunner "$java_cmd" \ + ${JAVA_OPTS} \ + ${SBT_OPTS:-$default_sbt_opts} \ + ${java_args[@]} \ + -jar "$rtexport" \ + "${java9_rt}" + fi + if [[ "$java_version" > "8" ]]; then + addJava "-Dscala.ext.dirs=${java9_ext}" + fi +} + run() { # no jar? download it. @@ -191,6 +218,9 @@ run() { # TODO - java check should be configurable... checkJava "1.6" + # Java 9 support + copyRt + #If we're in cygwin, we should use the windows config, and terminal hacks if [[ "$CYGWIN_FLAG" == "true" ]]; then stty -icanon min 1 -echo > /dev/null 2>&1 From e8670ba78fb114de013636ab70c6c7fa08e48661 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Wed, 15 Feb 2017 12:17:23 -0500 Subject: [PATCH 2/6] Change to Windows lineending --- src/universal/bin/sbt.bat | 190 +++++++++++++++++++------------------- 1 file changed, 95 insertions(+), 95 deletions(-) diff --git a/src/universal/bin/sbt.bat b/src/universal/bin/sbt.bat index 0f7a3e9a3..737d99db3 100644 --- a/src/universal/bin/sbt.bat +++ b/src/universal/bin/sbt.bat @@ -1,95 +1,95 @@ -@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 - -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 :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 - -:error -@endlocal -exit /B 1 - - -:end -@endlocal -exit /B 0 +@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 + +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 :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 + +:error +@endlocal +exit /B 1 + + +:end +@endlocal +exit /B 0 From 1b9f618efa2a4039a6961a8336b35034404f6cbb Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Wed, 15 Feb 2017 12:18:51 -0500 Subject: [PATCH 3/6] Implement JDK 9 support for Windows --- src/universal/bin/sbt.bat | 58 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/src/universal/bin/sbt.bat b/src/universal/bin/sbt.bat index 737d99db3..4411697a1 100644 --- a/src/universal/bin/sbt.bat +++ b/src/universal/bin/sbt.bat @@ -75,6 +75,12 @@ 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 :run %SBT_ARGS% if ERRORLEVEL 1 goto error @@ -93,3 +99,55 @@ exit /B 1 :end @endlocal exit /B 0 + +: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 +findstr /c:"version \"9" "%TEMP%.\out.txt" +if /I %ERRORLEVEL% EQU 0 (set JAVA_VERSION=9) +findstr /c:"version \"1.8" "%TEMP%.\out.txt" +if /I %ERRORLEVEL% EQU 0 (set JAVA_VERSION=1.8) +findstr /c:"version \"1.7" "%TEMP%.\out.txt" +if /I %ERRORLEVEL% EQU 0 (set JAVA_VERSION=1.7) +findstr /c:"version \"1.6" "%TEMP%.\out.txt" +if /I %ERRORLEVEL% EQU 0 (set JAVA_VERSION=1.6) +findstr /c:"version \"1.5" "%TEMP%.\out.txt" +if /I %ERRORLEVEL% EQU 0 (set JAVA_VERSION=1.5) + +set rtexport=%SBT_HOME%java9-rt-export.jar + +"%_JAVACMD%" %_JAVA_OPTS% %SBT_OPTS% -jar "%rtexport%" --global-base > "%TEMP%.\global_base.txt" +set /p sbt_global_dir= < "%TEMP%.\global_base.txt" +set java9_ext=%sbt_global_dir%\java9-rt-ext +set java9_rt=%java9_ext%\rt.jar + +echo %java9_rt% + +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" ( + 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 From dfc3312c7d47868d34eb69fbc112138f41d73ec1 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Wed, 15 Feb 2017 12:21:08 -0500 Subject: [PATCH 4/6] oraclejdk8 --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index e8c434f57..b58de08cf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,7 @@ script: scala: - 2.10.3 jdk: - - oraclejdk7 + - oraclejdk8 notifications: email: - sbt-dev-bot@googlegroups.com From 605a17d9495f2adca59fc282d3f9f24fdcda4043 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 19 Feb 2017 09:16:40 +0100 Subject: [PATCH 5/6] move JDK9 logic within copyRt --- src/universal/bin/sbt-launch-lib.bash | 33 +++++++++++++-------------- src/universal/bin/sbt.bat | 16 ++++++------- 2 files changed, 23 insertions(+), 26 deletions(-) diff --git a/src/universal/bin/sbt-launch-lib.bash b/src/universal/bin/sbt-launch-lib.bash index f51460a2a..c66f5e849 100755 --- a/src/universal/bin/sbt-launch-lib.bash +++ b/src/universal/bin/sbt-launch-lib.bash @@ -154,13 +154,6 @@ process_args () { ## parses 1.7, 1.8, 9, etc out of java version "1.8.0_91" java_version=$("$java_cmd" -Xmx512M -version 2>&1 | sed 's/.*version "\([0-9]*\)\(\.[0-9]*\)\{0,1\}\(.*\)*"/\1\2/; 1q') vlog "[process_args] java_version = '$java_version'" - rtexport=$(rt_export_file) - sbt_global_dir=$("$java_cmd" ${JAVA_OPTS} ${SBT_OPTS:-$default_sbt_opts} ${java_args[@]} \ - -jar "$rtexport" --global-base) - java9_ext=$(echo "$sbt_global_dir/java9-rt-ext") - java9_rt=$(echo "$java9_ext/rt.jar") - vlog "[process_args] sbt_global_dir = '$sbt_global_dir'" - vlog "[process_args] java9_rt = '$java9_rt'" } # Detect that we have java installed. @@ -187,21 +180,27 @@ checkJava() { } copyRt() { - if [[ "$java_version" > "8" ]] && [[ ! -f "$java9_rt" ]]; then - echo Copying runtime jar. - execRunner "$java_cmd" \ - ${JAVA_OPTS} \ - ${SBT_OPTS:-$default_sbt_opts} \ - ${java_args[@]} \ - -jar "$rtexport" \ - "${java9_rt}" - fi if [[ "$java_version" > "8" ]]; then + rtexport=$(rt_export_file) + sbt_global_dir=$("$java_cmd" ${JAVA_OPTS} ${SBT_OPTS:-$default_sbt_opts} ${java_args[@]} \ + -jar "$rtexport" --global-base) + java9_ext=$(echo "$sbt_global_dir/java9-rt-ext") + java9_rt=$(echo "$java9_ext/rt.jar") + vlog "[copyRt] sbt_global_dir = '$sbt_global_dir'" + vlog "[copyRt] java9_rt = '$java9_rt'" + if [[ ! -f "$java9_rt" ]]; then + echo Copying runtime jar. + execRunner "$java_cmd" \ + ${JAVA_OPTS} \ + ${SBT_OPTS:-$default_sbt_opts} \ + ${java_args[@]} \ + -jar "$rtexport" \ + "${java9_rt}" + fi addJava "-Dscala.ext.dirs=${java9_ext}" fi } - run() { # no jar? download it. [[ -f "$sbt_jar" ]] || acquire_sbt_jar "$sbt_version" || { diff --git a/src/universal/bin/sbt.bat b/src/universal/bin/sbt.bat index 4411697a1..a02088a23 100644 --- a/src/universal/bin/sbt.bat +++ b/src/universal/bin/sbt.bat @@ -115,15 +115,6 @@ if /I %ERRORLEVEL% EQU 0 (set JAVA_VERSION=1.6) findstr /c:"version \"1.5" "%TEMP%.\out.txt" if /I %ERRORLEVEL% EQU 0 (set JAVA_VERSION=1.5) -set rtexport=%SBT_HOME%java9-rt-export.jar - -"%_JAVACMD%" %_JAVA_OPTS% %SBT_OPTS% -jar "%rtexport%" --global-base > "%TEMP%.\global_base.txt" -set /p sbt_global_dir= < "%TEMP%.\global_base.txt" -set java9_ext=%sbt_global_dir%\java9-rt-ext -set java9_rt=%java9_ext%\rt.jar - -echo %java9_rt% - exit /B 0 :checkjava @@ -143,6 +134,13 @@ 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%" --global-base > "%TEMP%.\global_base.txt" + set /p sbt_global_dir= < "%TEMP%.\global_base.txt" + set java9_ext=%sbt_global_dir%\java9-rt-ext + set java9_rt=%java9_ext%\rt.jar + if not exist "%java9_rt%" ( echo Copying runtime jar. mkdir "%java9_ext%" From 39d850404555bd9da25adf0f4a5b758a08a955b5 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sat, 4 Mar 2017 13:03:36 -0500 Subject: [PATCH 6/6] --rt-ext-dir returns a dir specific to JDK 9 ver --- .../io/github/retronym/java9rtexport/Export.java | 16 +++++++++++----- .../java9rtexport/{Copy.java => IO.java} | 2 +- src/universal/bin/sbt-launch-lib.bash | 6 ++---- src/universal/bin/sbt.bat | 5 ++--- 4 files changed, 16 insertions(+), 13 deletions(-) rename java9-rt-export/src/main/java/io/github/retronym/java9rtexport/{Copy.java => IO.java} (99%) diff --git a/java9-rt-export/src/main/java/io/github/retronym/java9rtexport/Export.java b/java9-rt-export/src/main/java/io/github/retronym/java9rtexport/Export.java index eee31ce46..6bb468531 100644 --- a/java9-rt-export/src/main/java/io/github/retronym/java9rtexport/Export.java +++ b/java9-rt-export/src/main/java/io/github/retronym/java9rtexport/Export.java @@ -10,23 +10,29 @@ import java.util.Map; public class Export { public static void main(String[] args) { try { - if (args.length == 0) { System.err.println("Usage:"); System.err.println(" java -jar java9-rt-export-*.jar $HOME/.sbt/java9-rt-ext/rt.jar"); System.err.println(" Exports rt.jar to the specified path."); System.err.println(""); - System.err.println(" java -jar java9-rt-export-*.jar --global-base"); + System.err.println(" java -jar java9-rt-export-*.jar --rt-ext-dir"); System.err.println(" Prints sbt global base."); System.exit(-1); } String destination = args[0]; + Path defaultGlobalBase = Paths.get(System.getProperty("user.home"), ".sbt", "0.13"); + String globalBase = System.getProperty("sbt.global.base", defaultGlobalBase.toString()); if (destination.equals("--global-base")) { - Path defaultGlobalBase = Paths.get(System.getProperty("user.home"), ".sbt", "0.13"); - String globalBase = System.getProperty("sbt.global.base", defaultGlobalBase.toString()); System.out.println(globalBase); System.exit(0); } + if (destination.equals("--rt-ext-dir")) { + String v = System.getProperty("java.vendor") + "_" + System.getProperty("java.version"); + v = v.replaceAll("\\W", "_").toLowerCase(); + Path rtExtDir = Paths.get(globalBase, "java9-rt-ext-" + v); + System.out.println(rtExtDir.toString()); + System.exit(0); + } FileSystem fileSystem = FileSystems.getFileSystem(URI.create("jrt:/")); Path path = fileSystem.getPath("/modules"); Path destPath = Paths.get(destination); @@ -37,7 +43,7 @@ public class Export { Iterator iterator = Files.list(path).iterator(); while(iterator.hasNext()) { Path next = iterator.next(); - Copy.copyDirectory(next, zipfs.getPath("/")); + IO.copyDirectory(next, zipfs.getPath("/")); } } } catch (IOException e) { diff --git a/java9-rt-export/src/main/java/io/github/retronym/java9rtexport/Copy.java b/java9-rt-export/src/main/java/io/github/retronym/java9rtexport/IO.java similarity index 99% rename from java9-rt-export/src/main/java/io/github/retronym/java9rtexport/Copy.java rename to java9-rt-export/src/main/java/io/github/retronym/java9rtexport/IO.java index 31c7e95d7..a57eaa392 100644 --- a/java9-rt-export/src/main/java/io/github/retronym/java9rtexport/Copy.java +++ b/java9-rt-export/src/main/java/io/github/retronym/java9rtexport/IO.java @@ -9,7 +9,7 @@ import java.util.EnumSet; import static java.nio.file.StandardCopyOption.COPY_ATTRIBUTES; import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; -public class Copy { +public class IO { public static void copyDirectory(final Path source, final Path target) throws IOException { Files.walkFileTree(source, EnumSet.of(FileVisitOption.FOLLOW_LINKS), diff --git a/src/universal/bin/sbt-launch-lib.bash b/src/universal/bin/sbt-launch-lib.bash index c66f5e849..c58f445da 100755 --- a/src/universal/bin/sbt-launch-lib.bash +++ b/src/universal/bin/sbt-launch-lib.bash @@ -182,11 +182,9 @@ checkJava() { copyRt() { if [[ "$java_version" > "8" ]]; then rtexport=$(rt_export_file) - sbt_global_dir=$("$java_cmd" ${JAVA_OPTS} ${SBT_OPTS:-$default_sbt_opts} ${java_args[@]} \ - -jar "$rtexport" --global-base) - java9_ext=$(echo "$sbt_global_dir/java9-rt-ext") + java9_ext=$("$java_cmd" ${JAVA_OPTS} ${SBT_OPTS:-$default_sbt_opts} ${java_args[@]} \ + -jar "$rtexport" --rt-ext-dir) java9_rt=$(echo "$java9_ext/rt.jar") - vlog "[copyRt] sbt_global_dir = '$sbt_global_dir'" vlog "[copyRt] java9_rt = '$java9_rt'" if [[ ! -f "$java9_rt" ]]; then echo Copying runtime jar. diff --git a/src/universal/bin/sbt.bat b/src/universal/bin/sbt.bat index a02088a23..12178b7c7 100644 --- a/src/universal/bin/sbt.bat +++ b/src/universal/bin/sbt.bat @@ -136,9 +136,8 @@ exit /B 1 if /I "%JAVA_VERSION%" GEQ "9" ( set rtexport=%SBT_HOME%java9-rt-export.jar - "%_JAVACMD%" %_JAVA_OPTS% %SBT_OPTS% -jar "%rtexport%" --global-base > "%TEMP%.\global_base.txt" - set /p sbt_global_dir= < "%TEMP%.\global_base.txt" - set java9_ext=%sbt_global_dir%\java9-rt-ext + "%_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%" (