@@ -9,6 +9,9 @@ import org.gradle.api.tasks.Internal
99import org.gradle.api.tasks.Optional
1010import org.gradle.api.tasks.TaskAction
1111
12+ import java.util.zip.ZipEntry
13+ import java.util.zip.ZipFile
14+
1215/**
1316 * The platforms for which distributions of the GraalVM are available
1417 * for download.
@@ -109,8 +112,7 @@ abstract class GraalVMDownloadTask extends DefaultTask {
109112 if (configuredGraalVMPlatform == GraalVMPlatform . LINUX_AMD64 ) {
110113 platform = " linux-x64"
111114 } else if (configuredGraalVMPlatform == GraalVMPlatform . WINDOWS_AMD64 ) {
112- // TODO: check
113- platform = " windows"
115+ platform = " windows-x64"
114116 }
115117 final suffix = configuredGraalVMPlatform. isWindows() ? " zip" : " tar.gz"
116118 final fileName = " graalvm-${ jdk} _${ platform} _bin.${ suffix} "
@@ -218,28 +220,45 @@ abstract class GraalVMDownloadTask extends DefaultTask {
218220 return tempFile
219221 }
220222
221- File buildInstallationDir () {
222- final jdk = configuredGraalVMJDK. name
223- final installBaseDir = new File (project. projectDir, " software" )
224- return new File (installBaseDir, " graalvm-$jdk " ). absoluteFile
223+ File buildInstallationBaseDir () {
224+ // final jdk = configuredGraalVMJDK.name
225+ return new File (project. projectDir, " software" )
226+ // return new File(installBaseDir, "graalvm-$jdk").absoluteFile
225227 }
226228
227- def createInstallationDir () {
228- final installDir = buildInstallationDir ()
229+ def createInstallationBaseDir () {
230+ final installDir = buildInstallationBaseDir ()
229231 if (! installDir. exists()) {
230232 installDir. mkdirs()
231233 }
232234 return installDir
233235 }
234236
237+ def rootZipEntry (final File zipFile ) {
238+ new ZipFile (zipFile). withCloseable {zip ->
239+ return zip. stream(). findFirst(). get(). getName(). split(" /" )[0 ]
240+ }
241+ }
242+
235243 def installGraalVM (final File tempFile ) {
236- def installDir = buildInstallationDir()
244+ final jdk = configuredGraalVMJDK. name
245+ def installDir
237246 if (configuredGraalVMPlatform. isWindows()) {
247+ installDir = buildInstallationBaseDir()
238248 // windows OS: extract .zip file
249+ final root = rootZipEntry(tempFile. absoluteFile)
239250 def ant = new AntBuilder ()
240251 ant. unzip(src : tempFile. absolutePath, dest : installDir. absolutePath, overwrite : false )
252+ installDir = new File (installDir, root)
253+ final targetDir = new File (buildInstallationBaseDir(), " graalvm-$jdk " )
254+ installDir. renameTo(targetDir)
255+ installDir = targetDir
241256 } else {
257+ installDir = new File (buildInstallationBaseDir(), " graalvm-$jdk " ). absoluteFile
242258 // linux OS: extract .tgz file
259+ if (! installDir. exists()) {
260+ installDir. mkdirs()
261+ }
243262 def command = " tar xvf ${ tempFile.absolutePath} --directory ${ installDir.absolutePath} --strip-components=1"
244263 def process = command. execute()
245264 process. out. close()
@@ -254,7 +273,8 @@ abstract class GraalVMDownloadTask extends DefaultTask {
254273 }
255274
256275 // add JS language to the GraalVM
257- final binDir = new File (buildInstallationDir(), " bin" )
276+ logger. info(" Installation JS language in GraalVM for JDK '$jdk ' in directory '$installDir '" )
277+ final binDir = new File (installDir, " bin" )
258278 final guCommand = configuredGraalVMPlatform. isWindows()
259279 ? new File (binDir, " gu.cmd" )
260280 : new File (binDir, " gu" )
@@ -275,15 +295,15 @@ abstract class GraalVMDownloadTask extends DefaultTask {
275295 final platform = this . configuredGraalVMPlatform
276296 final jdk = this . configuredGraalVMJDK
277297 logger. info(" Downloading GraalVM for JDK '${ jdk} ' and platform '$platform ' ..." )
278- def installDir = buildInstallationDir()
298+ def installDir = new File (buildInstallationBaseDir(), " graalvm- ${ configuredGraalVMJDK.name } " ) . absoluteFile
279299 if (installDir. exists() && installDir. isDirectory()) {
280300 logger. info(" GraalVM for JDK '$jdk ' already installed in '${ installDir.absolutePath} . Skipping download.'" )
281301 return
282302 }
283303
284304 def url = buildDownloadUrl()
285305 def distribFile = downloadGraalVM(url)
286- def installBaseDir = createInstallationDir ()
306+ def installBaseDir = createInstallationBaseDir ()
287307 installGraalVM(distribFile)
288308 installDir = new File (installBaseDir, distribFile. name)
289309 logger. info(" Successfully downloaded GraalVM for JDK '$jdk '" )
0 commit comments