diff --git a/src/main/java/rife/bld/operations/JlinkOptions.java b/src/main/java/rife/bld/operations/JlinkOptions.java index 869c8b6..eaae145 100644 --- a/src/main/java/rife/bld/operations/JlinkOptions.java +++ b/src/main/java/rife/bld/operations/JlinkOptions.java @@ -49,6 +49,23 @@ public class JlinkOptions extends HashMap { return this; } + /** + * Compression to use in compressing resources. + *

+ * Requires Java 21 or higher. + *

+ * Where {@link ZipCompression#ZIP_0 ZIP_0} provides no compression and {@link ZipCompression#ZIP_9 ZIP_9} provides + * the best compression. + *

Default is {@link ZipCompression#ZIP_6 ZIP_6} + * + * @param compression the {@link ZipCompression compression} level + * @return this map of options + */ + public JlinkOptions compress(ZipCompression compression) { + put("--compress", compression.level); + return this; + } + /** * Enable compression of resources. * diff --git a/src/main/java/rife/bld/operations/JmodOptions.java b/src/main/java/rife/bld/operations/JmodOptions.java index 9fa7878..ca9a183 100644 --- a/src/main/java/rife/bld/operations/JmodOptions.java +++ b/src/main/java/rife/bld/operations/JmodOptions.java @@ -38,6 +38,24 @@ public class JmodOptions extends HashMap { return this; } + /** + * Compression to use when creating the JMOD archive. + *

+ * Requires Java 20 or higher. + *

+ * Where {@link ZipCompression#ZIP_0 ZIP_0} provides no compression and {@link ZipCompression#ZIP_9 ZIP_9} provides the + * best compression. + *

+ * Default is {@link ZipCompression#ZIP_6 ZIP_6} + * + * @param compression the {@link ZipCompression compression} level + * @return this map of options + */ + public JmodOptions compress(ZipCompression compression) { + put("--compress", compression.level); + return this; + } + /** * Location of user-editable config files * diff --git a/src/main/java/rife/bld/operations/JpackageOptions.java b/src/main/java/rife/bld/operations/JpackageOptions.java index 74160db..8702562 100644 --- a/src/main/java/rife/bld/operations/JpackageOptions.java +++ b/src/main/java/rife/bld/operations/JpackageOptions.java @@ -27,8 +27,10 @@ public class JpackageOptions extends HashMap { /** * List of application launchers. *

- * The main application launcher will be built from the command line options. Additional alternative launchers - * can be built using this option, and this option can be used to build multiple additional launchers. + * The main application launcher will be built from the command line options. + *

+ * Additional alternative launchers can be built using this option, and this option can be used to build multiple + * additional launchers. * * @param launcher one or more {@link Launcher} * @return this map of options @@ -58,6 +60,8 @@ public class JpackageOptions extends HashMap { /** * List of paths to files and/or directories to add to the application payload. + *

+ * Requires Java 20 or higher. * * @param additionalContent one or more path * @return this map of options @@ -213,6 +217,8 @@ public class JpackageOptions extends HashMap { /** * Request to create an installer that will register the main application launcher as a background service-type * application. + *

+ * Requires Java 20 or higher. * * @param launcherAsService {@code true} to register the launcher as a service; {@code false} otherwise * @return this map of options diff --git a/src/main/java/rife/bld/operations/ZipCompression.java b/src/main/java/rife/bld/operations/ZipCompression.java new file mode 100644 index 0000000..4d5722a --- /dev/null +++ b/src/main/java/rife/bld/operations/ZipCompression.java @@ -0,0 +1,30 @@ +/** + * Copyright 2024 Erik C. Thauvin (https://erik.thauvin.net/) + * Licensed under the Apache License, Version 2.0 (the "License") + */ +package rife.bld.operations; + +/** + * The zip compression levels for jlink and jmod. + * + * @author Erik C. Thauvin + * @since 2.0.2 + */ +public enum ZipCompression { + ZIP_0("zip-0"), + ZIP_1("zip-1"), + ZIP_2("zip-2"), + ZIP_3("zip-3"), + ZIP_4("zip-4"), + ZIP_5("zip-5"), + ZIP_6("zip-6"), + ZIP_7("zip-7"), + ZIP_8("zip-8"), + ZIP_9("zip-9"); + + public final String level; + + ZipCompression(String level) { + this.level = level; + } +} diff --git a/src/test/java/rife/bld/operations/TestJlinkOperation.java b/src/test/java/rife/bld/operations/TestJlinkOperation.java index ff76635..00b9f1c 100644 --- a/src/test/java/rife/bld/operations/TestJlinkOperation.java +++ b/src/test/java/rife/bld/operations/TestJlinkOperation.java @@ -97,8 +97,13 @@ public class TestJlinkOperation { .modulePath("src/test/resources/jlink/build/jmod") .addModules("dev.mccue.tree") .launcher("tree", "dev.mccue.tree", "dev.mccue.tree.Tree") - .compress(CompressionLevel.NO_COMPRESSION) .output(output.getAbsolutePath()); + if (Runtime.version().version().get(0) >= 21) { + options.compress(ZipCompression.ZIP_6); + } else { + options.compress(CompressionLevel.ZIP); + } + var jlink = new JlinkOperation().jlinkOptions(options); assertDoesNotThrow(jlink::execute); diff --git a/src/test/java/rife/bld/operations/TestJmodOperation.java b/src/test/java/rife/bld/operations/TestJmodOperation.java index f6bcca8..ceda755 100644 --- a/src/test/java/rife/bld/operations/TestJmodOperation.java +++ b/src/test/java/rife/bld/operations/TestJmodOperation.java @@ -109,6 +109,10 @@ public class TestJmodOperation { var mod = new File(tmpdir, "dev.mccue.tree.jmod"); var options = new JmodOptions().classpath("src/test/resources/jlink/build/jar/dev.mccue.tree.jar"); + if (Runtime.version().version().get(0) >= 20) { + options.compress(ZipCompression.ZIP_9); + } + var jmod = new JmodOperation() .operationMode(OperationMode.CREATE) .jmodFile(mod.getAbsolutePath())