2
0
Fork 0
mirror of https://github.com/ethauvin/bld.git synced 2025-04-25 08:17:11 -07:00

Added JlinkOptions, JmodOptions and JpackageOptions File argument alternatives with Path and String.

Moved launches configurations from JPackage options to operation.
This commit is contained in:
Geert Bevin 2024-08-25 14:07:36 -04:00 committed by Erik C. Thauvin
parent 9f9e8a95db
commit a4300b37d1
Signed by: erik
GPG key ID: 776702A6A2DA330E
10 changed files with 1151 additions and 63 deletions

22
.idea/misc.xml generated
View file

@ -1,4 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="EntryPointsManager">
<entry_points version="2.0">
<entry_point TYPE="field" FQNAME="rife.bld.operations.JpackageOptions.PackageType APP_IMAGE" />
<entry_point TYPE="field" FQNAME="rife.bld.operations.JpackageOptions.PackageType DMG" />
<entry_point TYPE="field" FQNAME="rife.bld.operations.JpackageOptions.PackageType MSI" />
<entry_point TYPE="field" FQNAME="rife.bld.operations.JpackageOptions.PackageType PKG" />
<entry_point TYPE="field" FQNAME="rife.bld.operations.JpackageOptions.PackageType RPM" />
<entry_point TYPE="field" FQNAME="rife.bld.operations.JlinkOptions.CompressionLevel CONSTANT_STRING_SHARING" />
<entry_point TYPE="field" FQNAME="rife.bld.operations.JlinkOptions.CompressionLevel NO_COMPRESSION" />
<entry_point TYPE="field" FQNAME="rife.bld.operations.JlinkOptions.Endian LITTLE" />
<entry_point TYPE="field" FQNAME="rife.bld.operations.JmodOperation.OperationMode EXTRACT" />
<entry_point TYPE="field" FQNAME="rife.bld.operations.JmodOperation.OperationMode HASH" />
<entry_point TYPE="field" FQNAME="rife.bld.operations.JmodOptions.ResolvedReason DEPRECATED_FOR_REMOVAL" />
<entry_point TYPE="field" FQNAME="rife.bld.operations.JmodOptions.ResolvedReason INCUBATING" />
</entry_points>
<pattern value="rife.bld.operations.JpackageOptions.PackageType" />
<pattern value="rife.bld.operations.JlinkOptions.CompressionLevel" />
<pattern value="rife.bld.operations.JlinkOptions.Endian" />
<pattern value="rife.bld.operations.JmodOperation.OperationMode" />
<pattern value="rife.bld.operations.JmodOptions.ResolvedReason" />
</component>
<component name="PDMPlugin"> <component name="PDMPlugin">
<option name="skipTestSources" value="false" /> <option name="skipTestSources" value="false" />
</component> </component>

View file

@ -4,7 +4,10 @@
*/ */
package rife.bld.operations; package rife.bld.operations;
import java.io.File;
import java.nio.file.Path;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -35,6 +38,28 @@ public class JlinkOperation extends AbstractToolProviderOperation<JlinkOperation
return this; return this;
} }
/**
* Read options and/or mode from file(s).
*
* @param file one or more file
* @return this operation instance
*/
public JlinkOperation cmdFiles(File... file) {
cmdFiles_.addAll(Arrays.stream(file).map(File::getAbsolutePath).toList());
return this;
}
/**
* Read options and/or mode from file(s).
*
* @param file one or more file
* @return this operation instance
*/
public JlinkOperation cmdFiles(Path... file) {
cmdFiles_.addAll(Arrays.stream(file).map(Path::toString).toList());
return this;
}
/** /**
* Retrieves the list of files containing options or mode. * Retrieves the list of files containing options or mode.
* *

View file

@ -4,6 +4,8 @@
*/ */
package rife.bld.operations; package rife.bld.operations;
import java.io.File;
import java.nio.file.Path;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@ -161,6 +163,34 @@ public class JlinkOptions extends HashMap<String, String> {
return this; return this;
} }
/**
* Module path.
* <p>
* If not specified, the JDKs jmods directory will be used, if it exists. If specified, but it does not contain the
* java.base module, the JDKs jmods directory will be added, if it exists.
*
* @param path the module path
* @return this map of options
*/
public JlinkOptions modulePath(File path) {
put("--module-path", path.getAbsolutePath());
return this;
}
/**
* Module path.
* <p>
* If not specified, the JDKs jmods directory will be used, if it exists. If specified, but it does not contain the
* java.base module, the JDKs jmods directory will be added, if it exists.
*
* @param path the module path
* @return this map of options
*/
public JlinkOptions modulePath(Path path) {
put("--module-path", path.toString());
return this;
}
/** /**
* Exclude include header files. * Exclude include header files.
* *
@ -202,6 +232,28 @@ public class JlinkOptions extends HashMap<String, String> {
return this; return this;
} }
/**
* Location of output path.
*
* @param path the output path
* @return this map of options
*/
public JlinkOptions output(File path) {
put("--output", path.getAbsolutePath());
return this;
}
/**
* Location of output path.
*
* @param path the output path
* @return this map of options
*/
public JlinkOptions output(Path path) {
put("--output", path.toString());
return this;
}
/** /**
* Associates {@code null} with the specified key in this map. If the map previously contained a mapping for the * Associates {@code null} with the specified key in this map. If the map previously contained a mapping for the
* key, the old value is replaced. * key, the old value is replaced.

View file

@ -4,7 +4,10 @@
*/ */
package rife.bld.operations; package rife.bld.operations;
import java.io.File;
import java.nio.file.Path;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -44,6 +47,28 @@ public class JmodOperation extends AbstractToolProviderOperation<JmodOperation>
return this; return this;
} }
/**
* Read options and/or mode from file(s).
*
* @param file one or more file
* @return this operation instance
*/
public JmodOperation cmdFiles(File... file) {
cmdFiles.addAll(Arrays.stream(file).map(File::getAbsolutePath).toList());
return this;
}
/**
* Read options and/or mode from file(s).
*
* @param file one or more file
* @return this operation instance
*/
public JmodOperation cmdFiles(Path... file) {
cmdFiles.addAll(Arrays.stream(file).map(Path::toString).toList());
return this;
}
@Override @Override
public void execute() throws Exception { public void execute() throws Exception {
if (operationMode_ != null) { if (operationMode_ != null) {
@ -82,6 +107,32 @@ public class JmodOperation extends AbstractToolProviderOperation<JmodOperation>
return this; return this;
} }
/**
* Specifies name of the JMOD file to create or from which to retrieve information.
* <p>
* The JMOD file is <b>required</b>.
*
* @param file the JMOD file
* @return this operation instance
*/
public JmodOperation jmodFile(File file) {
jmodFile_ = file.getAbsolutePath();
return this;
}
/**
* Specifies name of the JMOD file to create or from which to retrieve information.
* <p>
* The JMOD file is <b>required</b>.
*
* @param file the JMOD file
* @return this operation instance
*/
public JmodOperation jmodFile(Path file) {
jmodFile_ = file.toString();
return this;
}
/** /**
* Retrieves the list of options for the jmod tool. * Retrieves the list of options for the jmod tool.
* <p> * <p>

View file

@ -4,6 +4,8 @@
*/ */
package rife.bld.operations; package rife.bld.operations;
import java.io.File;
import java.nio.file.Path;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
@ -39,6 +41,28 @@ public class JmodOptions extends HashMap<String, String> {
return this; return this;
} }
/**
* Location of native commands.
*
* @param path the location
* @return this map of options
*/
public JmodOptions cmds(File path) {
put("--cmds", path.getAbsolutePath());
return this;
}
/**
* Location of native commands.
*
* @param path the location
* @return this map of options
*/
public JmodOptions cmds(Path path) {
put("--cmds", path.toString());
return this;
}
/** /**
* Compression to use when creating the JMOD archive. * Compression to use when creating the JMOD archive.
* <p> * <p>
@ -68,6 +92,28 @@ public class JmodOptions extends HashMap<String, String> {
return this; return this;
} }
/**
* Location of user-editable config files
*
* @param path the path to the config files
* @return this map of options
*/
public JmodOptions config(File path) {
put("--config", path.getAbsolutePath());
return this;
}
/**
* Location of user-editable config files
*
* @param path the path to the config files
* @return this map of options
*/
public JmodOptions config(Path path) {
put("--config", path.toString());
return this;
}
/** /**
* Date and time for the timestamps of entries. * Date and time for the timestamps of entries.
* *
@ -90,6 +136,28 @@ public class JmodOptions extends HashMap<String, String> {
return this; return this;
} }
/**
* Target directory for extract
*
* @param path the directory path
* @return this map of options
*/
public JmodOptions dir(File path) {
put("--dir", path.getAbsolutePath());
return this;
}
/**
* Target directory for extract
*
* @param path the directory path
* @return this map of options
*/
public JmodOptions dir(Path path) {
put("--dir", path.toString());
return this;
}
/** /**
* Exclude from the default root set of modules. * Exclude from the default root set of modules.
* *
@ -163,6 +231,28 @@ public class JmodOptions extends HashMap<String, String> {
return this; return this;
} }
/**
* Location of header files.
*
* @param path the location
* @return this map of options
*/
public JmodOptions headerFiles(File path) {
put("--header-files", path.getAbsolutePath());
return this;
}
/**
* Location of header files.
*
* @param path the location
* @return this map of options
*/
public JmodOptions headerFiles(Path path) {
put("--header-files", path.toString());
return this;
}
/** /**
* Location of legal notices. * Location of legal notices.
* *
@ -174,6 +264,28 @@ public class JmodOptions extends HashMap<String, String> {
return this; return this;
} }
/**
* Location of legal notices.
*
* @param path the location
* @return this map of options
*/
public JmodOptions legalNotices(File path) {
put("--legal-notices", path.getAbsolutePath());
return this;
}
/**
* Location of legal notices.
*
* @param path the location
* @return this map of options
*/
public JmodOptions legalNotices(Path path) {
put("--legal-notices", path.toString());
return this;
}
/** /**
* Location of native libraries. * Location of native libraries.
* *
@ -185,6 +297,28 @@ public class JmodOptions extends HashMap<String, String> {
return this; return this;
} }
/**
* Location of native libraries.
*
* @param path the location
* @return this map of options
*/
public JmodOptions libs(File path) {
put("--libs", path.getAbsolutePath());
return this;
}
/**
* Location of native libraries.
*
* @param path the location
* @return this map of options
*/
public JmodOptions libs(Path path) {
put("--libs", path.toString());
return this;
}
/** /**
* Main class. * Main class.
* *
@ -207,6 +341,28 @@ public class JmodOptions extends HashMap<String, String> {
return this; return this;
} }
/**
* Location of man pages.
*
* @param path the location
* @return this map of options
*/
public JmodOptions manPages(File path) {
put("--man-pages", path.getAbsolutePath());
return this;
}
/**
* Location of man pages.
*
* @param path the location
* @return this map of options
*/
public JmodOptions manPages(Path path) {
put("--man-pages", path.toString());
return this;
}
/** /**
* Module path. * Module path.
* *
@ -218,6 +374,28 @@ public class JmodOptions extends HashMap<String, String> {
return this; return this;
} }
/**
* Module path.
*
* @param path the module path
* @return this map of options
*/
public JmodOptions modulePath(File path) {
put("--module-path", path.getAbsolutePath());
return this;
}
/**
* Module path.
*
* @param path the module path
* @return this map of options
*/
public JmodOptions modulePath(Path path) {
put("--module-path", path.toString());
return this;
}
/** /**
* Module version. * Module version.
* *

View file

@ -4,7 +4,10 @@
*/ */
package rife.bld.operations; package rife.bld.operations;
import java.io.File;
import java.nio.file.Path;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -17,25 +20,48 @@ import java.util.Map;
public class JpackageOperation extends AbstractToolProviderOperation<JpackageOperation> { public class JpackageOperation extends AbstractToolProviderOperation<JpackageOperation> {
private final List<String> cmdFiles_ = new ArrayList<>(); private final List<String> cmdFiles_ = new ArrayList<>();
private final JpackageOptions jpackageOptions_ = new JpackageOptions(); private final JpackageOptions jpackageOptions_ = new JpackageOptions();
private final List<Launcher> launchers_ = new ArrayList<>();
public JpackageOperation() { public JpackageOperation() {
super("jpackage"); super("jpackage");
} }
@Override /**
public void execute() throws Exception { * List of application launchers.
toolArgs(cmdFiles_.stream().map(opt -> '@' + opt).toList()); * <p>
toolArgs(jpackageOptions_); * The main application launcher will be built from the command line options.
super.execute(); * <p>
* 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 JpackageOperation.Launcher}
* @return this operation instance
*/
public JpackageOperation addLauncher(Launcher... launcher) {
launchers_.addAll(Arrays.asList(launcher));
return this;
} }
/** /**
* Retrieves the list of files containing options or mode. * Read options and/or mode from file(s).
* *
* @return the list of files * @param file one or more file
* @return this operation instance
*/ */
public List<String> fileOptions() { public JpackageOperation cmdFiles(File... file) {
return cmdFiles_; cmdFiles_.addAll(Arrays.stream(file).map(File::getAbsolutePath).toList());
return this;
}
/**
* Read options and/or mode from file(s).
*
* @param file one or more file
* @return this operation instance
*/
public JpackageOperation cmdFiles(Path... file) {
cmdFiles_.addAll(Arrays.stream(file).map(Path::toString).toList());
return this;
} }
/** /**
@ -49,6 +75,25 @@ public class JpackageOperation extends AbstractToolProviderOperation<JpackageOpe
return this; return this;
} }
/**
* Retrieves the list of files containing options or mode.
*
* @return the list of files
*/
public List<String> cmdFiles() {
return cmdFiles_;
}
@Override
public void execute() throws Exception {
toolArgs(cmdFiles_.stream().map(opt -> '@' + opt).toList());
for (var l : launchers_) {
toolArgs("--add-launcher", l.name + '=' + l.path);
}
toolArgs(jpackageOptions_);
super.execute();
}
/** /**
* Retrieves the list of options for the jpackage tool. * Retrieves the list of options for the jpackage tool.
* <p> * <p>
@ -72,4 +117,37 @@ public class JpackageOperation extends AbstractToolProviderOperation<JpackageOpe
jpackageOptions_.putAll(options); jpackageOptions_.putAll(options);
return this; return this;
} }
/**
* Retrieves the list of application launchers.
*
* @return the list of launchers
*/
public List<Launcher> launchers() {
return launchers_;
}
/**
* Name of launcher, and a path to a Properties file that contains a list of key, value pairs.
* <p>
* The keys {@code module}, {@code main-jar}, {@code main-class}, {@code description},
* {@code arguments}, {@code java-options}, {@code app-version}, {@code icon},
* {@code launcher-as-service}, {@code win-console}, {@code win-shortcut}, {@code win-menu},
* {@code linux-app-category}, and {@code linux-shortcut} can be used.
* <p>
* These options are added to, or used to overwrite, the original command line options to build an additional
* alternative launcher.
*
* @param name the name
* @param path absolute path or relative to the current directory
*/
public record Launcher(String name, String path) {
public Launcher(String name, File path) {
this(name, path.getAbsolutePath());
}
public Launcher(String name, Path path) {
this(name, path.toString());
}
}
} }

View file

@ -4,6 +4,9 @@
*/ */
package rife.bld.operations; package rife.bld.operations;
import java.io.File;
import java.nio.file.Path;
import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
/** /**
@ -24,24 +27,6 @@ public class JpackageOptions extends HashMap<String, String> {
return this; return this;
} }
/**
* List of application launchers.
* <p>
* The main application launcher will be built from the command line options.
* <p>
* 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
*/
public JpackageOptions addLauncher(Launcher... launcher) {
for (var l : launcher) {
put("--add-launcher", l.name + '=' + l.path);
}
return this;
}
/** /**
* List of modules to add. * List of modules to add.
* <p> * <p>
@ -82,6 +67,29 @@ public class JpackageOptions extends HashMap<String, String> {
return this; return this;
} }
/**
* Location of the predefined application image that is used to build an installable package.
*
* @param path absolute path or relative to the current directory
* @return this map of options
*/
public JpackageOptions appImage(File path) {
put("--app-image", path.getAbsolutePath());
return this;
}
/**
* Location of the predefined application image that is used to build an installable package.
*
* @param path absolute path or relative to the current directory
* @return this map of options
*/
@SuppressWarnings("UnusedReturnValue")
public JpackageOptions appImage(Path path) {
put("--app-image", path.toString());
return this;
}
/** /**
* Version of the application and/or package. * Version of the application and/or package.
* *
@ -139,6 +147,33 @@ public class JpackageOptions extends HashMap<String, String> {
return this; return this;
} }
/**
* Path where generated output file is placed.
* <p>
* Defaults to the current working directory.
*
* @param path absolute path or relative to the current directory
* @return this map of options
*/
@SuppressWarnings("UnusedReturnValue")
public JpackageOptions dest(File path) {
put("--dest", path.getAbsolutePath());
return this;
}
/**
* Path where generated output file is placed.
* <p>
* Defaults to the current working directory.
*
* @param path absolute path or relative to the current directory
* @return this map of options
*/
public JpackageOptions dest(Path path) {
put("--dest", path.toString());
return this;
}
/** /**
* Path to a Properties file that contains list of key, value pairs. * Path to a Properties file that contains list of key, value pairs.
* <p> * <p>
@ -153,6 +188,35 @@ public class JpackageOptions extends HashMap<String, String> {
return this; return this;
} }
/**
* Path to a Properties file that contains list of key, value pairs.
* <p>
* The keys {@code extension}, {@code mime-type}, {@code icon}, and {@code description} can be used to describe the
* association.
*
* @param path absolute path or relative to the current directory
* @return this map of options
*/
@SuppressWarnings("UnusedReturnValue")
public JpackageOptions fileAssociations(File... path) {
put("--file-associations", String.join(",", Arrays.stream(path).map(File::getAbsolutePath).toList()));
return this;
}
/**
* Path to a Properties file that contains list of key, value pairs.
* <p>
* The keys {@code extension}, {@code mime-type}, {@code icon}, and {@code description} can be used to describe the
* association.
*
* @param path absolute path or relative to the current directory
* @return this map of options
*/
public JpackageOptions fileAssociations(Path... path) {
put("--file-associations", String.join(",", Arrays.stream(path).map(Path::toString).toList()));
return this;
}
/** /**
* Path of the icon of the application package. * Path of the icon of the application package.
* *
@ -164,6 +228,29 @@ public class JpackageOptions extends HashMap<String, String> {
return this; return this;
} }
/**
* Path of the icon of the application package.
*
* @param path absolute path or relative to the current directory
* @return this map of options
*/
@SuppressWarnings("UnusedReturnValue")
public JpackageOptions icon(File path) {
put("--icon", path.getAbsolutePath());
return this;
}
/**
* Path of the icon of the application package.
*
* @param path absolute path or relative to the current directory
* @return this map of options
*/
public JpackageOptions icon(Path path) {
put("--icon", path.toString());
return this;
}
/** /**
* Path of the input directory that contains the files to be packaged. * Path of the input directory that contains the files to be packaged.
* <p> * <p>
@ -177,6 +264,32 @@ public class JpackageOptions extends HashMap<String, String> {
return this; return this;
} }
/**
* Path of the input directory that contains the files to be packaged.
* <p>
* All files in the input directory will be packaged into the application image.
*
* @param path absolute path or relative to the current directory
* @return this map of options
*/
public JpackageOptions input(File path) {
put("--input", path.getAbsolutePath());
return this;
}
/**
* Path of the input directory that contains the files to be packaged.
* <p>
* All files in the input directory will be packaged into the application image.
*
* @param path absolute path or relative to the current directory
* @return this map of options
*/
public JpackageOptions input(Path path) {
put("--input", path.toString());
return this;
}
/** /**
* Absolute path of the installation directory of the application. * Absolute path of the installation directory of the application.
* *
@ -188,6 +301,29 @@ public class JpackageOptions extends HashMap<String, String> {
return this; return this;
} }
/**
* Absolute path of the installation directory of the application.
*
* @param path the absolute directory path
* @return this map of options
*/
@SuppressWarnings("UnusedReturnValue")
public JpackageOptions installDir(File path) {
put("--install-dir", path.getAbsolutePath());
return this;
}
/**
* Absolute path of the installation directory of the application.
*
* @param path the absolute directory path
* @return this map of options
*/
public JpackageOptions installDir(Path path) {
put("--install-dir", path.toString());
return this;
}
/** /**
* Options to pass to the Java runtime. * Options to pass to the Java runtime.
* *
@ -243,6 +379,29 @@ public class JpackageOptions extends HashMap<String, String> {
return this; return this;
} }
/**
* Path to the license file.
*
* @param path absolute path or relative to the current directory
* @return this map of options
*/
@SuppressWarnings("UnusedReturnValue")
public JpackageOptions licenseFile(File path) {
put("--license-file", path.getAbsolutePath());
return this;
}
/**
* Path to the license file.
*
* @param path absolute path or relative to the current directory
* @return this map of options
*/
public JpackageOptions licenseFile(Path path) {
put("--license-file", path.toString());
return this;
}
/** /**
* Group value of the RPM {@code <name>.spec} file or Section value of DEB control file. * Group value of the RPM {@code <name>.spec} file or Section value of DEB control file.
* *
@ -395,6 +554,29 @@ public class JpackageOptions extends HashMap<String, String> {
return this; return this;
} }
/**
* Include all the referenced content in the dmg.
*
* @param additionalContent one or more path
* @return this map of options
*/
@SuppressWarnings("UnusedReturnValue")
public JpackageOptions macDmgContent(File... additionalContent) {
put("--mac-dmg-content", String.join(",", Arrays.stream(additionalContent).map(File::getAbsolutePath).toList()));
return this;
}
/**
* Include all the referenced content in the dmg.
*
* @param additionalContent one or more path
* @return this map of options
*/
public JpackageOptions macDmgContent(Path... additionalContent) {
put("--mac-dmg-content", String.join(",", Arrays.stream(additionalContent).map(Path::toString).toList()));
return this;
}
/** /**
* Path to file containing entitlements to use when signing executables and libraries in the bundle. * Path to file containing entitlements to use when signing executables and libraries in the bundle.
* *
@ -406,6 +588,29 @@ public class JpackageOptions extends HashMap<String, String> {
return this; return this;
} }
/**
* Path to file containing entitlements to use when signing executables and libraries in the bundle.
*
* @param path the fie path
* @return this map of options
*/
@SuppressWarnings("UnusedReturnValue")
public JpackageOptions macEntitlements(File path) {
put("--mac-entitlements", path.getAbsolutePath());
return this;
}
/**
* Path to file containing entitlements to use when signing executables and libraries in the bundle.
*
* @param path the fie path
* @return this map of options
*/
public JpackageOptions macEntitlements(Path path) {
put("--mac-entitlements", path.toString());
return this;
}
/** /**
* Identity used to sign "pkg" installer. * Identity used to sign "pkg" installer.
* <p> * <p>
@ -593,6 +798,36 @@ public class JpackageOptions extends HashMap<String, String> {
return this; return this;
} }
/**
* List of module paths.
* <p>
* Each path is either a directory of modules or the path to a modular jar.
* <p>
* Each path is absolute or relative to the current directory.
*
* @param path one or more path
* @return this map of options
*/
public JpackageOptions modulePath(File... path) {
put("--module-path", String.join(":", Arrays.stream(path).map(File::getAbsolutePath).toList()));
return this;
}
/**
* List of module paths.
* <p>
* Each path is either a directory of modules or the path to a modular jar.
* <p>
* Each path is absolute or relative to the current directory.
*
* @param path one or more path
* @return this map of options
*/
public JpackageOptions modulePath(Path... path) {
put("--module-path", String.join(":", Arrays.stream(path).map(Path::toString).toList()));
return this;
}
/** /**
* Name of the application and/or package. * Name of the application and/or package.
* *
@ -628,6 +863,35 @@ public class JpackageOptions extends HashMap<String, String> {
return this; return this;
} }
/**
* Path to override jpackage resources.
* <p>
* Icons, template files, and other resources of jpackage can be over-ridden by adding replacement resources to
* this directory.
*
* @param path absolute path or relative to the current directory
* @return this map of options
*/
@SuppressWarnings("UnusedReturnValue")
public JpackageOptions resourceDir(File path) {
put("--resource-dir", path.getAbsolutePath());
return this;
}
/**
* Path to override jpackage resources.
* <p>
* Icons, template files, and other resources of jpackage can be over-ridden by adding replacement resources to
* this directory.
*
* @param path absolute path or relative to the current directory
* @return this map of options
*/
public JpackageOptions resourceDir(Path path) {
put("--resource-dir", path.toString());
return this;
}
/** /**
* Path of the predefined runtime image that will be copied into the application image. * Path of the predefined runtime image that will be copied into the application image.
* <p> * <p>
@ -646,6 +910,43 @@ public class JpackageOptions extends HashMap<String, String> {
return this; return this;
} }
/**
* Path of the predefined runtime image that will be copied into the application image.
* <p>
* If not specified, jpackage will run jlink to create the runtime image using options:
* {@link JlinkOptions#stripNativeCommands(boolean) stripNativeCommands}
* {@link JlinkOptions#stripDebug(boolean) stripDebug} {@link JlinkOptions#noManPages(boolean) noManPages}
* {@link JlinkOptions#noHeaderFiles(boolean) noHeaderFiles}
* <p>
* Option is required when creating a runtime package.
*
* @param path absolute path or relative to the current directory
* @return this map of options
*/
@SuppressWarnings("UnusedReturnValue")
public JpackageOptions runtimeImage(File path) {
put("--runtime-image", path.getAbsolutePath());
return this;
}
/**
* Path of the predefined runtime image that will be copied into the application image.
* <p>
* If not specified, jpackage will run jlink to create the runtime image using options:
* {@link JlinkOptions#stripNativeCommands(boolean) stripNativeCommands}
* {@link JlinkOptions#stripDebug(boolean) stripDebug} {@link JlinkOptions#noManPages(boolean) noManPages}
* {@link JlinkOptions#noHeaderFiles(boolean) noHeaderFiles}
* <p>
* Option is required when creating a runtime package.
*
* @param path absolute path or relative to the current directory
* @return this map of options
*/
public JpackageOptions runtimeImage(Path path) {
put("--runtime-image", path.toString());
return this;
}
/** /**
* Strip debug information. * Strip debug information.
* *
@ -676,6 +977,37 @@ public class JpackageOptions extends HashMap<String, String> {
return this; return this;
} }
/**
* Path of a new or empty directory used to create temporary files.
* <p>
* If specified, the temp dir will not be removed upon the task completion and must be removed manually.
* <p>
* If not specified, a temporary directory will be created and removed upon the task completion.
*
* @param path absolute path or relative to the current directory
* @return this map of options
*/
@SuppressWarnings("UnusedReturnValue")
public JpackageOptions temp(File path) {
put("--temp", path.getAbsolutePath());
return this;
}
/**
* Path of a new or empty directory used to create temporary files.
* <p>
* If specified, the temp dir will not be removed upon the task completion and must be removed manually.
* <p>
* If not specified, a temporary directory will be created and removed upon the task completion.
*
* @param path absolute path or relative to the current directory
* @return this map of options
*/
public JpackageOptions temp(Path path) {
put("--temp", path.toString());
return this;
}
/** /**
* The type of package to create. * The type of package to create.
* <p> * <p>
@ -868,21 +1200,4 @@ public class JpackageOptions extends HashMap<String, String> {
this.type = type; this.type = type;
} }
} }
/**
* Name of launcher, and a path to a Properties file that contains a list of key, value pairs.
* <p>
* The keys {@code module}, {@code main-jar}, {@code main-class}, {@code description},
* {@code arguments}, {@code java-options}, {@code app-version}, {@code icon},
* {@code launcher-as-service}, {@code win-console}, {@code win-shortcut}, {@code win-menu},
* {@code linux-app-category}, and {@code linux-shortcut} can be used.
* <p>
* These options are added to, or used to overwrite, the original command line options to build an additional
* alternative launcher.
*
* @param name the name
* @param path absolute path or relative to the current directory
*/
public record Launcher(String name, String path) {
}
} }

View file

@ -14,6 +14,7 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.PrintStream; import java.io.PrintStream;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path;
import java.util.HashMap; import java.util.HashMap;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
@ -89,11 +90,21 @@ public class TestJlinkOperation {
assertTrue(out.contains("List of available plugins:"), out); assertTrue(out.contains("List of available plugins:"), out);
} }
@Test
void testCmdFilesPath() {
System.setOut(new PrintStream(outputStreamCaptor));
var jlink = new JlinkOperation().cmdFiles(Path.of("src/test/resources/jlink/options_verbose.txt"),
Path.of("src/test/resources/jlink/options_version.txt"));
assertDoesNotThrow(jlink::execute);
var out = outputStreamCaptor.toString();
assertTrue(out.matches("[\\d.]+[\\r\\n]+"), out);
}
@Test @Test
void testCmdFilesVersion() { void testCmdFilesVersion() {
System.setOut(new PrintStream(outputStreamCaptor)); System.setOut(new PrintStream(outputStreamCaptor));
var jlink = new JlinkOperation().cmdFiles("src/test/resources/jlink/options_verbose.txt", var jlink = new JlinkOperation().cmdFiles(new File("src/test/resources/jlink/options_verbose.txt"),
"src/test/resources/jlink/options_version.txt"); new File("src/test/resources/jlink/options_version.txt"));
assertDoesNotThrow(jlink::execute); assertDoesNotThrow(jlink::execute);
var out = outputStreamCaptor.toString(); var out = outputStreamCaptor.toString();
assertTrue(out.matches("[\\d.]+[\\r\\n]+"), out); assertTrue(out.matches("[\\d.]+[\\r\\n]+"), out);
@ -118,10 +129,10 @@ public class TestJlinkOperation {
var output = new File(tmpdir, "jlink"); var output = new File(tmpdir, "jlink");
var options = new JlinkOptions() var options = new JlinkOptions()
.modulePath("src/test/resources/jlink/build/jmod") .modulePath(new File("src/test/resources/jlink/build/jmod"))
.addModules("dev.mccue.tree") .addModules("dev.mccue.tree")
.launcher("tree", "dev.mccue.tree", "dev.mccue.tree.Tree") .launcher("tree", "dev.mccue.tree", "dev.mccue.tree.Tree")
.output(output.getAbsolutePath()); .output(output);
if (Runtime.version().version().get(0) >= 21) { if (Runtime.version().version().get(0) >= 21) {
options.compress(ZipCompression.ZIP_6); options.compress(ZipCompression.ZIP_6);
} else { } else {
@ -144,6 +155,20 @@ public class TestJlinkOperation {
assertTrue(jlink.toolArgs().isEmpty(), "args not empty"); assertTrue(jlink.toolArgs().isEmpty(), "args not empty");
} }
@Test
void testModulePath() {
var options = new JlinkOptions();
options.modulePath("foo");
assertEquals("foo", options.get("--module-path"));
options.modulePath(Path.of("bar"));
assertEquals("bar", options.get("--module-path"));
var foo = new File("foo");
options.modulePath(foo);
assertEquals(foo.getAbsolutePath(), options.get("--module-path"));
}
@Test @Test
void testNoArguments() { void testNoArguments() {
var jlink = new JlinkOperation(); var jlink = new JlinkOperation();
@ -152,6 +177,20 @@ public class TestJlinkOperation {
assertThrows(ExitStatusException.class, jlink::execute); assertThrows(ExitStatusException.class, jlink::execute);
} }
@Test
void testOutput() {
var options = new JlinkOptions();
options.output("foo");
assertEquals("foo", options.get("--output"));
options.output(Path.of("bar"));
assertEquals("bar", options.get("--output"));
var foo = new File("foo");
options.output(foo);
assertEquals(foo.getAbsolutePath(), options.get("--output"));
}
@Test @Test
void testVersion() { void testVersion() {
System.setOut(new PrintStream(outputStreamCaptor)); System.setOut(new PrintStream(outputStreamCaptor));

View file

@ -14,6 +14,7 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.PrintStream; import java.io.PrintStream;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.util.HashMap; import java.util.HashMap;
@ -84,7 +85,7 @@ public class TestJmodOperation {
@Test @Test
void testCmdFiles() { void testCmdFiles() {
System.setOut(new PrintStream(outputStreamCaptor)); System.setOut(new PrintStream(outputStreamCaptor));
var jmod = new JmodOperation().cmdFiles("src/test/resources/jlink/options_version.txt"); var jmod = new JmodOperation().cmdFiles(new File("src/test/resources/jlink/options_version.txt"));
assertDoesNotThrow(jmod::execute); assertDoesNotThrow(jmod::execute);
var out = outputStreamCaptor.toString(); var out = outputStreamCaptor.toString();
assertTrue(out.matches("[\\d.]+[\\r\\n]+"), out); assertTrue(out.matches("[\\d.]+[\\r\\n]+"), out);
@ -98,7 +99,7 @@ public class TestJmodOperation {
var jmod = new JmodOperation() var jmod = new JmodOperation()
.cmdFiles("src/test/resources/jlink/options_jmod.txt") .cmdFiles("src/test/resources/jlink/options_jmod.txt")
.jmodFile(mod.getAbsolutePath()); .jmodFile(mod);
assertDoesNotThrow(jmod::execute); assertDoesNotThrow(jmod::execute);
assertTrue(mod.exists(), "mod does not exist"); assertTrue(mod.exists(), "mod does not exist");
@ -107,6 +108,39 @@ public class TestJmodOperation {
} }
} }
@Test
void testCmdFilesPath() {
System.setOut(new PrintStream(outputStreamCaptor));
var jmod = new JmodOperation().cmdFiles(Path.of("src/test/resources/jlink/options_version.txt"));
assertDoesNotThrow(jmod::execute);
var out = outputStreamCaptor.toString();
assertTrue(out.matches("[\\d.]+[\\r\\n]+"), out);
}
@Test
void testCmds() {
var options = new JmodOptions().cmds("foo");
assertEquals("foo", options.get("--cmds"));
options = options.cmds(Path.of("bar"));
assertEquals("bar", options.get("--cmds"));
var foo = new File("foo");
options.cmds(foo);
assertEquals(foo.getAbsolutePath(), options.get("--cmds"));
}
@Test
void testConfig() {
var options = new JmodOptions().config("foo");
assertEquals("foo", options.get("--config"));
options = options.config(Path.of("bar"));
assertEquals("bar", options.get("--config"));
var foo = new File("foo");
options.config(foo);
assertEquals(foo.getAbsolutePath(), options.get("--config"));
}
@Test @Test
void testCreate() throws IOException { void testCreate() throws IOException {
var tmpdir = Files.createTempDirectory("bld-jmod-test").toFile(); var tmpdir = Files.createTempDirectory("bld-jmod-test").toFile();
@ -119,7 +153,7 @@ public class TestJmodOperation {
.classpath("src/test/resources/jlink/build/jar/dev.mccue.apple.jar"); .classpath("src/test/resources/jlink/build/jar/dev.mccue.apple.jar");
var jmod = new JmodOperation() var jmod = new JmodOperation()
.operationMode(OperationMode.CREATE) .operationMode(OperationMode.CREATE)
.jmodFile(mod.getAbsolutePath()) .jmodFile(mod)
.jmodOptions(options); .jmodOptions(options);
assertDoesNotThrow(jmod::execute); assertDoesNotThrow(jmod::execute);
@ -129,6 +163,18 @@ public class TestJmodOperation {
} }
} }
@Test
void testDir() {
var options = new JmodOptions().dir("foo");
assertEquals("foo", options.get("--dir"));
options = options.dir(Path.of("bar"));
assertEquals("bar", options.get("--dir"));
var foo = new File("foo");
options.dir(foo);
assertEquals(foo.getAbsolutePath(), options.get("--dir"));
}
@Test @Test
void testExecute() throws IOException { void testExecute() throws IOException {
var tmpdir = Files.createTempDirectory("bld-jmod-test").toFile(); var tmpdir = Files.createTempDirectory("bld-jmod-test").toFile();
@ -142,7 +188,7 @@ public class TestJmodOperation {
var jmod = new JmodOperation() var jmod = new JmodOperation()
.operationMode(OperationMode.CREATE) .operationMode(OperationMode.CREATE)
.jmodFile(mod.getAbsolutePath()) .jmodFile(mod)
.jmodOptions(options); .jmodOptions(options);
assertDoesNotThrow(jmod::execute); assertDoesNotThrow(jmod::execute);
@ -165,6 +211,18 @@ public class TestJmodOperation {
} }
} }
@Test
void testHeaderFiles() {
var options = new JmodOptions().headerFiles("foo");
assertEquals("foo", options.get("--header-files"));
options = options.headerFiles(Path.of("bar"));
assertEquals("bar", options.get("--header-files"));
var foo = new File("foo");
options.headerFiles(foo);
assertEquals(foo.getAbsolutePath(), options.get("--header-files"));
}
@Test @Test
void testHelp() { void testHelp() {
var jmod = new JmodOperation().toolArgs("--help-extra"); var jmod = new JmodOperation().toolArgs("--help-extra");
@ -172,6 +230,66 @@ public class TestJmodOperation {
assertTrue(jmod.toolArgs().isEmpty(), "args not empty"); assertTrue(jmod.toolArgs().isEmpty(), "args not empty");
} }
@Test
void testJmodFile() {
var op = new JmodOperation().jmodFile("foo");
assertEquals("foo", op.jmodFile());
op = op.jmodFile(Path.of("bar"));
assertEquals("bar", op.jmodFile());
var foo = new File("foo");
op.jmodFile(foo);
assertEquals(foo.getAbsolutePath(), op.jmodFile());
}
@Test
void testLegalNotices() {
var options = new JmodOptions().legalNotices("foo");
assertEquals("foo", options.get("--legal-notices"));
options = options.legalNotices(Path.of("bar"));
assertEquals("bar", options.get("--legal-notices"));
var foo = new File("foo");
options.legalNotices(foo);
assertEquals(foo.getAbsolutePath(), options.get("--legal-notices"));
}
@Test
void testLibs() {
var options = new JmodOptions().libs("foo");
assertEquals("foo", options.get("--libs"));
options = options.libs(Path.of("bar"));
assertEquals("bar", options.get("--libs"));
var foo = new File("foo");
options.libs(foo);
assertEquals(foo.getAbsolutePath(), options.get("--libs"));
}
@Test
void testManPages() {
var options = new JmodOptions().manPages("foo");
assertEquals("foo", options.get("--man-pages"));
options = options.manPages(Path.of("bar"));
assertEquals("bar", options.get("--man-pages"));
var foo = new File("foo");
options.manPages(foo);
assertEquals(foo.getAbsolutePath(), options.get("--man-pages"));
}
@Test
void testModulePath() {
var options = new JmodOptions().modulePath("foo");
assertEquals("foo", options.get("--module-path"));
options = options.modulePath(Path.of("bar"));
assertEquals("bar", options.get("--module-path"));
var foo = new File("foo");
options.modulePath(foo);
assertEquals(foo.getAbsolutePath(), options.get("--module-path"));
}
@Test @Test
void testNoArguments() { void testNoArguments() {
var jmod = new JmodOperation(); var jmod = new JmodOperation();

View file

@ -10,12 +10,14 @@ import rife.bld.operations.exceptions.ExitStatusException;
import rife.tools.FileUtils; import rife.tools.FileUtils;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.PrintStream; import java.io.PrintStream;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path;
import java.util.HashMap; import java.util.HashMap;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
import static rife.bld.operations.JpackageOptions.Launcher; import static rife.bld.operations.JpackageOperation.Launcher;
import static rife.bld.operations.JpackageOptions.PackageType; import static rife.bld.operations.JpackageOptions.PackageType;
public class TestJpackageOperation { public class TestJpackageOperation {
@ -27,11 +29,42 @@ public class TestJpackageOperation {
System.setOut(stdout); System.setOut(stdout);
} }
@Test
void testAddLauncher() {
var op = new JpackageOperation();
var foo = new Launcher("foo-name", "foo-path");
var bar = new Launcher("bar-name", Path.of("bar-path"));
assertEquals(bar.name(), "bar-name");
assertEquals(bar.path(), "bar-path");
var f = new File("foo/bar");
var foobar = new Launcher("foobar", f);
assertEquals(foobar.name(), "foobar");
assertEquals(foobar.path(), f.getAbsolutePath());
op = op.addLauncher(foo);
assertTrue(op.launchers().contains(foo), "foo not found");
op.addLauncher(bar);
assertTrue(op.launchers().contains(bar), "bar not found");
}
@Test
void testAppImage() {
var options = new JpackageOptions().appImage("foo");
assertEquals("foo", options.get("--app-image"));
options.appImage(Path.of("bar"));
assertEquals("bar", options.get("--app-image"));
var foo = new File("foo");
options = options.appImage(foo);
assertEquals(foo.getAbsolutePath(), options.get("--app-image"));
}
@Test @Test
void testArguments() { void testArguments() {
var args = new HashMap<String, String>(); var args = new HashMap<String, String>();
args.put("--about-url", "about-url"); args.put("--about-url", "about-url");
args.put("--add-launcher", "name=path");
args.put("--add-modules", "modules-1,modules-2"); args.put("--add-modules", "modules-1,modules-2");
args.put("--app-content", "content-1,content-2"); args.put("--app-content", "content-1,content-2");
args.put("--app-image", "app-image"); args.put("--app-image", "app-image");
@ -93,7 +126,6 @@ public class TestJpackageOperation {
var options = new JpackageOptions() var options = new JpackageOptions()
.aboutUrl(args.get("--about-url")) .aboutUrl(args.get("--about-url"))
.addLauncher(new Launcher("name", "path"))
.addModules(args.get("--add-modules").split(",")) .addModules(args.get("--add-modules").split(","))
.appContent(args.get("--app-content").split(",")) .appContent(args.get("--app-content").split(","))
.appImage(args.get("--app-image")) .appImage(args.get("--app-image"))
@ -162,6 +194,35 @@ public class TestJpackageOperation {
} }
@Test
void testCmdFiles() {
System.setOut(new PrintStream(outputStreamCaptor));
var jpackage = new JpackageOperation().cmdFiles(new File("src/test/resources/jlink/options_verbose.txt"),
new File("src/test/resources/jlink/options_version.txt"));
assertDoesNotThrow(jpackage::execute);
var out = outputStreamCaptor.toString();
assertTrue(out.matches("[\\d.]+[\\r\\n]+"), out);
}
@Test
void testCmdFilesPath() {
System.setOut(new PrintStream(outputStreamCaptor));
var jpackage = new JpackageOperation().cmdFiles(Path.of("src/test/resources/jlink/options_verbose.txt"),
Path.of("src/test/resources/jlink/options_version.txt"));
assertDoesNotThrow(jpackage::execute);
var out = outputStreamCaptor.toString();
assertTrue(out.matches("[\\d.]+[\\r\\n]+"), out);
}
@Test
void testCmdFilesVersion() {
System.setOut(new PrintStream(outputStreamCaptor));
var jpackage = new JpackageOperation().cmdFiles("src/test/resources/jlink/options_version.txt");
assertDoesNotThrow(jpackage::execute);
var out = outputStreamCaptor.toString();
assertTrue(out.matches("[\\d.]+[\\r\\n]+"), out);
}
@Test @Test
void testCreatePackage() throws Exception { void testCreatePackage() throws Exception {
var tmpdir = Files.createTempDirectory("bld-jpackage-test").toFile(); var tmpdir = Files.createTempDirectory("bld-jpackage-test").toFile();
@ -196,13 +257,29 @@ public class TestJpackageOperation {
} }
@Test @Test
void testCmdFiles() { void testDest() {
System.setOut(new PrintStream(outputStreamCaptor)); var options = new JpackageOptions().dest("foo");
var jpackage = new JpackageOperation().cmdFiles("src/test/resources/jlink/options_verbose.txt", assertEquals("foo", options.get("--dest"));
"src/test/resources/jlink/options_version.txt"); options = options.dest(Path.of("bar"));
assertDoesNotThrow(jpackage::execute); assertEquals("bar", options.get("--dest"));
var out = outputStreamCaptor.toString();
assertTrue(out.matches("[\\d.]+[\\r\\n]+"), out); var foo = new File("foo");
options.dest(foo);
assertEquals(foo.getAbsolutePath(), options.get("--dest"));
}
@Test
void testFileAssociations() {
var options = new JpackageOptions().fileAssociations("foo", "bar");
assertEquals("foo,bar", options.get("--file-associations"));
options = options.fileAssociations(Path.of("bar"), Path.of("foo"));
assertEquals("bar,foo", options.get("--file-associations"));
var foo = new File("foo");
var bar = new File("bar");
options.fileAssociations(foo, bar);
assertEquals(foo.getAbsolutePath() + ',' + bar.getAbsolutePath(), options.get("--file-associations"));
} }
@Test @Test
@ -212,14 +289,147 @@ public class TestJpackageOperation {
assertTrue(jpackage.toolArgs().isEmpty(), "args not empty"); assertTrue(jpackage.toolArgs().isEmpty(), "args not empty");
} }
@Test
void testIcon() {
var options = new JpackageOptions().icon("foo");
assertEquals("foo", options.get("--icon"));
options = options.icon(Path.of("bar"));
assertEquals("bar", options.get("--icon"));
var foo = new File("foo");
options.icon(foo);
assertEquals(foo.getAbsolutePath(), options.get("--icon"));
}
@Test
void testInput() {
var options = new JpackageOptions();
options.input("foo");
assertEquals("foo", options.get("--input"));
options.input(Path.of("bar"));
assertEquals("bar", options.get("--input"));
var foo = new File("foo");
options.input(foo);
assertEquals(foo.getAbsolutePath(), options.get("--input"));
}
@Test
void testInstallDir() {
var options = new JpackageOptions().installDir("foo");
assertEquals("foo", options.get("--install-dir"));
options = options.installDir(Path.of("bar"));
assertEquals("bar", options.get("--install-dir"));
var foo = new File("foo");
options.installDir(foo);
assertEquals(foo.getAbsolutePath(), options.get("--install-dir"));
}
@Test
void testLicenseFile() {
var options = new JpackageOptions().licenseFile("foo");
assertEquals("foo", options.get("--license-file"));
options = options.licenseFile(Path.of("bar"));
assertEquals("bar", options.get("--license-file"));
var foo = new File("foo");
options.licenseFile(foo);
assertEquals(foo.getAbsolutePath(), options.get("--license-file"));
}
@Test
void testMacDmgContent() {
var options = new JpackageOptions().macDmgContent("foo", "bar");
assertEquals("foo,bar", options.get("--mac-dmg-content"));
options = options.macDmgContent(Path.of("bar"), Path.of("foo"));
assertEquals("bar,foo", options.get("--mac-dmg-content"));
var foo = new File("foo");
var bar = new File("bar");
options.macDmgContent(foo, bar);
assertEquals(foo.getAbsolutePath() + ',' + bar.getAbsolutePath(), options.get("--mac-dmg-content"));
}
@Test
void testMacEntitlements() {
var options = new JpackageOptions().macEntitlements("foo");
assertEquals("foo", options.get("--mac-entitlements"));
options = options.macEntitlements(Path.of("bar"));
assertEquals("bar", options.get("--mac-entitlements"));
var foo = new File("foo");
options.macEntitlements(foo);
assertEquals(foo.getAbsolutePath(), options.get("--mac-entitlements"));
}
@Test
void testModule() {
var options = new JpackageOptions().module("name");
assertEquals("name", options.get("--module"));
options.module("name", "class");
assertEquals("name:class", options.get("--module"));
}
@Test
void testModulePath() {
var options = new JpackageOptions().modulePath("foo");
assertEquals("foo", options.get("--module-path"));
options = options.modulePath(Path.of("bar"));
assertEquals("bar", options.get("--module-path"));
var foo = new File("foo");
options.modulePath(foo);
assertEquals(foo.getAbsolutePath(), options.get("--module-path"));
}
@Test @Test
void testNoArguments() { void testNoArguments() {
var jpackage = new JpackageOperation(); var jpackage = new JpackageOperation();
assertTrue(jpackage.fileOptions().isEmpty(), "file options not empty"); assertTrue(jpackage.cmdFiles().isEmpty(), "file options not empty");
assertTrue(jpackage.jpackageOptions().isEmpty(), "jpackage options not empty"); assertTrue(jpackage.jpackageOptions().isEmpty(), "jpackage options not empty");
assertThrows(ExitStatusException.class, jpackage::execute); assertThrows(ExitStatusException.class, jpackage::execute);
} }
@Test
void testResourceDir() {
var options = new JpackageOptions().resourceDir("foo");
assertEquals("foo", options.get("--resource-dir"));
options = options.resourceDir(Path.of("bar"));
assertEquals("bar", options.get("--resource-dir"));
var foo = new File("foo");
options.resourceDir(foo);
assertEquals(foo.getAbsolutePath(), options.get("--resource-dir"));
}
@Test
void testRuntimeImage() {
var options = new JpackageOptions().runtimeImage("foo");
assertEquals("foo", options.get("--runtime-image"));
options = options.runtimeImage(Path.of("bar"));
assertEquals("bar", options.get("--runtime-image"));
var foo = new File("foo");
options.runtimeImage(foo);
assertEquals(foo.getAbsolutePath(), options.get("--runtime-image"));
}
@Test
void testTemp() {
var options = new JpackageOptions().temp("foo");
assertEquals("foo", options.get("--temp"));
options = options.temp(Path.of("bar"));
assertEquals("bar", options.get("--temp"));
var foo = new File("foo");
options.temp(foo);
assertEquals(foo.getAbsolutePath(), options.get("--temp"));
}
@Test @Test
void testVersion() { void testVersion() {
System.setOut(new PrintStream(outputStreamCaptor)); System.setOut(new PrintStream(outputStreamCaptor));