Skip to content

Commit f64be25

Browse files
committed
feat: extracted jdk package installation into public util function
1 parent 9962d67 commit f64be25

3 files changed

Lines changed: 51 additions & 51 deletions

File tree

src/main/java/dev/jbang/devkitman/jdkinstallers/FoojayJdkInstaller.java

Lines changed: 6 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import java.io.InputStreamReader;
66
import java.io.UnsupportedEncodingException;
77
import java.net.URLEncoder;
8-
import java.nio.file.Files;
98
import java.nio.file.Path;
109
import java.util.*;
1110
import java.util.function.Function;
@@ -236,39 +235,21 @@ private Comparator<JdkResult> majorVersionSort() {
236235
"Downloading JDK {0}. Be patient, this can take several minutes...",
237236
version);
238237
String url = foojayJdk.downloadUrl;
239-
LOGGER.log(Level.FINE, "Downloading {0}", url);
240-
Path jdkTmpDir = jdkDir.getParent().resolve(jdkDir.getFileName() + ".tmp");
241-
Path jdkOldDir = jdkDir.getParent().resolve(jdkDir.getFileName() + ".old");
242-
FileUtils.deletePath(jdkTmpDir);
243-
FileUtils.deletePath(jdkOldDir);
238+
244239
try {
240+
LOGGER.log(Level.FINE, "Downloading {0}", url);
245241
Path jdkPkg = remoteAccessProvider.downloadFromUrl(url);
242+
246243
LOGGER.log(Level.INFO, "Installing JDK {0}...", version);
247-
LOGGER.log(Level.FINE, "Unpacking to {0}", jdkDir);
248-
UnpackUtils.unpackJdk(jdkPkg, jdkTmpDir);
249-
if (Files.isDirectory(jdkDir)) {
250-
Files.move(jdkDir, jdkOldDir);
251-
} else if (Files.isSymbolicLink(jdkDir)) {
252-
// This means we have a broken/invalid link
253-
FileUtils.deletePath(jdkDir);
254-
}
255-
Files.move(jdkTmpDir, jdkDir);
256-
FileUtils.deletePath(jdkOldDir);
244+
JavaUtils.installJdk(jdkPkg, jdkDir);
245+
257246
Jdk.InstalledJdk newJdk = jdkProvider.createJdk(foojayJdk.id(), jdkDir);
258247
if (newJdk == null) {
259248
throw new IllegalStateException("Cannot obtain version of recently installed JDK");
260249
}
261250
return newJdk;
262251
} catch (Exception e) {
263-
FileUtils.deletePath(jdkTmpDir);
264-
if (!Files.isDirectory(jdkDir) && Files.isDirectory(jdkOldDir)) {
265-
try {
266-
Files.move(jdkOldDir, jdkDir);
267-
} catch (IOException ex) {
268-
// Ignore
269-
}
270-
}
271-
String msg = "Required Java version not possible to download or install.";
252+
String msg = "Required Java version not possible to download or install: " + version;
272253
LOGGER.log(Level.FINE, msg);
273254
throw new IllegalStateException(
274255
"Unable to download or install JDK version " + version, e);

src/main/java/dev/jbang/devkitman/jdkinstallers/MetadataJdkInstaller.java

Lines changed: 6 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import java.io.InputStream;
55
import java.io.InputStreamReader;
66
import java.net.URI;
7-
import java.nio.file.Files;
87
import java.nio.file.Path;
98
import java.util.*;
109
import java.util.function.Function;
@@ -314,39 +313,21 @@ private Comparator<MetadataResult> majorVersionSort() {
314313
"Downloading JDK {0}. Be patient, this can take several minutes...",
315314
version);
316315
String url = metadataJdk.downloadUrl;
317-
LOGGER.log(Level.FINE, "Downloading {0}", url);
318-
Path jdkTmpDir = jdkDir.getParent().resolve(jdkDir.getFileName() + ".tmp");
319-
Path jdkOldDir = jdkDir.getParent().resolve(jdkDir.getFileName() + ".old");
320-
FileUtils.deletePath(jdkTmpDir);
321-
FileUtils.deletePath(jdkOldDir);
316+
322317
try {
318+
LOGGER.log(Level.FINE, "Downloading {0}", url);
323319
Path jdkPkg = remoteAccessProvider.downloadFromUrl(url);
320+
324321
LOGGER.log(Level.INFO, "Installing JDK {0}...", version);
325-
LOGGER.log(Level.FINE, "Unpacking to {0}", jdkDir);
326-
UnpackUtils.unpackJdk(jdkPkg, jdkTmpDir);
327-
if (Files.isDirectory(jdkDir)) {
328-
Files.move(jdkDir, jdkOldDir);
329-
} else if (Files.isSymbolicLink(jdkDir)) {
330-
// This means we have a broken/invalid link
331-
FileUtils.deletePath(jdkDir);
332-
}
333-
Files.move(jdkTmpDir, jdkDir);
334-
FileUtils.deletePath(jdkOldDir);
322+
JavaUtils.installJdk(jdkPkg, jdkDir);
323+
335324
Jdk.InstalledJdk newJdk = jdkProvider.createJdk(metadataJdk.id(), jdkDir);
336325
if (newJdk == null) {
337326
throw new IllegalStateException("Cannot obtain version of recently installed JDK");
338327
}
339328
return newJdk;
340329
} catch (Exception e) {
341-
FileUtils.deletePath(jdkTmpDir);
342-
if (!Files.isDirectory(jdkDir) && Files.isDirectory(jdkOldDir)) {
343-
try {
344-
Files.move(jdkOldDir, jdkDir);
345-
} catch (IOException ex) {
346-
// Ignore
347-
}
348-
}
349-
String msg = "Required Java version not possible to download or install.";
330+
String msg = "Required Java version not possible to download or install: " + version;
350331
LOGGER.log(Level.FINE, msg);
351332
throw new IllegalStateException(
352333
"Unable to download or install JDK version " + version, e);

src/main/java/dev/jbang/devkitman/util/JavaUtils.java

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ public static Path jre2jdk(@NonNull Path jdkHome) {
157157
return jdkHome;
158158
}
159159

160-
static public void safeDeleteJdk(@NonNull Path jdkHome) {
160+
public static void safeDeleteJdk(@NonNull Path jdkHome) {
161161
if (OsUtils.isWindows()) {
162162
// On Windows we have to check nobody is currently using the JDK or we could
163163
// be causing all kinds of trouble
@@ -175,4 +175,42 @@ static public void safeDeleteJdk(@NonNull Path jdkHome) {
175175
FileUtils.deletePath(jdkHome);
176176
}
177177
}
178+
179+
public static void installJdk(Path jdkPkg, Path jdkDir) throws IOException {
180+
Path jdkTmpDir = jdkDir.getParent().resolve(jdkDir.getFileName() + ".tmp");
181+
Path jdkOldDir = jdkDir.getParent().resolve(jdkDir.getFileName() + ".old");
182+
FileUtils.deletePath(jdkTmpDir);
183+
FileUtils.deletePath(jdkOldDir);
184+
try {
185+
LOGGER.log(Level.FINE, "Unpacking to {0}", jdkDir);
186+
// Unpack JDK package to temp dir
187+
UnpackUtils.unpackJdk(jdkPkg, jdkTmpDir);
188+
// Check if the package contains a valid JDK
189+
Optional<String> v = JavaUtils.resolveJavaVersionStringFromPath(jdkTmpDir);
190+
if (!v.isPresent()) {
191+
throw new IllegalStateException("The JDK package does not seem to contain a valid JDK");
192+
}
193+
if (Files.isDirectory(jdkDir)) {
194+
// Rename existing JDK dir to have an .old extension
195+
Files.move(jdkDir, jdkOldDir);
196+
} else if (Files.isSymbolicLink(jdkDir)) {
197+
// This means we have a broken/invalid link
198+
FileUtils.deletePath(jdkDir);
199+
}
200+
// Rename temp dir to the final JDK dir name
201+
Files.move(jdkTmpDir, jdkDir);
202+
// Delete old JDK dir
203+
FileUtils.deletePath(jdkOldDir);
204+
} catch (Exception e) {
205+
FileUtils.deletePath(jdkTmpDir);
206+
if (!Files.isDirectory(jdkDir) && Files.isDirectory(jdkOldDir)) {
207+
try {
208+
Files.move(jdkOldDir, jdkDir);
209+
} catch (IOException ex) {
210+
// Ignore
211+
}
212+
}
213+
throw new IOException("Unable to install JDK", e);
214+
}
215+
}
178216
}

0 commit comments

Comments
 (0)