diff --git a/README.md b/README.md index f26e368d..b807f539 100644 --- a/README.md +++ b/README.md @@ -158,6 +158,7 @@ By default it will generate next artifacts in `${outputDirectory} ` folder: | Property | Mandatory | Default value | Description | |----------------------------|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `additionalJlinkArgs` | :x: | `[]` | Additional arguments appended to the `jlink` call when generating a customized JRE, e.g. `--include-locales=en,es` or `--compress=0`. | | `additionalModulePaths` | :x: | `[]` | Additional module paths for `jdeps`. | | `additionalModules` | :x: | `[]` | Additional modules to the ones identified by `jdeps` or the specified with `modules` property. | | `additionalResources` | :x: | `[]` | Additional files and folders to include in the bundled app. | diff --git a/src/main/java/io/github/javapackager/gradle/PackagePluginExtension.java b/src/main/java/io/github/javapackager/gradle/PackagePluginExtension.java index a6f7cd63..5af3bf50 100644 --- a/src/main/java/io/github/javapackager/gradle/PackagePluginExtension.java +++ b/src/main/java/io/github/javapackager/gradle/PackagePluginExtension.java @@ -29,6 +29,7 @@ public PackagePluginExtension(Project project) { super(); this.project = project; this.platform = Platform.auto; + this.additionalJlinkArgs = new ArrayList<>(); this.additionalModules = new ArrayList<>(); this.additionalModulePaths = new ArrayList<>(); this.additionalResources = new ArrayList<>(); diff --git a/src/main/java/io/github/javapackager/gradle/PackageTask.java b/src/main/java/io/github/javapackager/gradle/PackageTask.java index 4c00d737..e2b48aef 100644 --- a/src/main/java/io/github/javapackager/gradle/PackageTask.java +++ b/src/main/java/io/github/javapackager/gradle/PackageTask.java @@ -549,6 +549,18 @@ public void setAdditionalModulePaths(List additionalModulePaths) { this.additionalModulePaths = additionalModulePaths; } + @Input + @Optional + private List additionalJlinkArgs; + + public List getAdditionalJlinkArgs() { + return additionalJlinkArgs; + } + + public void setAdditionalJlinkArgs(List additionalJlinkArgs) { + this.additionalJlinkArgs = additionalJlinkArgs; + } + @Input @Optional private List fileAssociations; @@ -643,6 +655,7 @@ protected Packager createPackager() throws Exception { return (Packager) PackagerFactory .createPackager(defaultIfNull(platform, extension.getPlatform())) + .additionalJlinkArgs(defaultIfNull(additionalJlinkArgs, extension.getAdditionalJlinkArgs())) .additionalModules(defaultIfNull(additionalModules, extension.getAdditionalModules())) .additionalModulePaths(defaultIfNull(additionalModulePaths, extension.getAdditionalModulePaths())) .additionalResources(defaultIfNull(additionalResources, extension.getAdditionalResources())) diff --git a/src/main/java/io/github/javapackager/maven/PackageMojo.java b/src/main/java/io/github/javapackager/maven/PackageMojo.java index c2cb2758..12060c6a 100644 --- a/src/main/java/io/github/javapackager/maven/PackageMojo.java +++ b/src/main/java/io/github/javapackager/maven/PackageMojo.java @@ -309,6 +309,12 @@ public PackageMojo(BuildPluginManager pluginManager) { @Parameter(property = "additionalModulePaths", required = false) private List additionalModulePaths; + /** + * Additional arguments passed to jlink when generating a customized JRE + */ + @Parameter(property = "additionalJlinkArgs", required = false) + private List additionalJlinkArgs; + /** * Packaging JDK */ @@ -353,6 +359,7 @@ public void execute() throws MojoExecutionException { Packager packager = (Packager) PackagerFactory .createPackager(platform) + .additionalJlinkArgs(additionalJlinkArgs) .additionalModules(additionalModules) .additionalModulePaths(additionalModulePaths) .additionalResources(additionalResources) diff --git a/src/main/java/io/github/javapackager/packagers/BundleJre.java b/src/main/java/io/github/javapackager/packagers/BundleJre.java index 4671aaa2..ddb19674 100644 --- a/src/main/java/io/github/javapackager/packagers/BundleJre.java +++ b/src/main/java/io/github/javapackager/packagers/BundleJre.java @@ -49,6 +49,7 @@ protected File doApply(Packager packager) throws Exception { List requiredModules = packager.getModules(); List additionalModules = packager.getAdditionalModules(); List additionalModulePaths = packager.getAdditionalModulePaths(); + List additionalJlinkArgs = packager.getAdditionalJlinkArgs(); File currentJdk = packager.getPackagingJdk(); Logger.infoIndent("Bundling JRE ... with " + currentJdk); @@ -167,7 +168,8 @@ protected File doApply(Packager packager) throws Exception { "--no-man-pages", "--strip-debug", "--release-info", releaseInfo, - (jlinkVersion < 21 ? "--compress=2" : null) + (VersionUtils.getJavaMajorVersion() < 21 ? "--compress=2" : null), + additionalJlinkArgs ); // sets execution permissions on executables in jre diff --git a/src/main/java/io/github/javapackager/packagers/PackagerSettings.java b/src/main/java/io/github/javapackager/packagers/PackagerSettings.java index 9f9a45c5..91b394f6 100644 --- a/src/main/java/io/github/javapackager/packagers/PackagerSettings.java +++ b/src/main/java/io/github/javapackager/packagers/PackagerSettings.java @@ -66,6 +66,7 @@ public class PackagerSettings { protected String jreMinVersion; protected Manifest manifest; protected List additionalModulePaths; + protected List additionalJlinkArgs; protected List fileAssociations; protected File packagingJdk; protected Scripts scripts; @@ -408,6 +409,14 @@ public List getAdditionalModulePaths() { return additionalModulePaths; } + /** + * Get additional jlink arguments + * @return Additional jlink arguments + */ + public List getAdditionalJlinkArgs() { + return additionalJlinkArgs; + } + /** * Get file associations * @return File associations @@ -867,6 +876,16 @@ public PackagerSettings additionalModulePaths(List additionalModulePaths) return this; } + /** + * Set additional jlink arguments + * @param additionalJlinkArgs Additional jlink arguments list + * @return Packager settings + */ + public PackagerSettings additionalJlinkArgs(List additionalJlinkArgs) { + this.additionalJlinkArgs = additionalJlinkArgs; + return this; + } + /** * Set file associations * @param fileAssociations File associations list @@ -943,7 +962,8 @@ public String toString() { + ", createZipball=" + createZipball + ", zipballName=" + zipballName + ", extra=" + extra + ", useResourcesAsWorkingDir=" + useResourcesAsWorkingDir + ", assetsDir=" + assetsDir+ ", classpath=" + classpath + ", jreMinVersion=" + jreMinVersion + ", manifest=" + manifest + ", additionalModulePaths=" - + additionalModulePaths + ", fileAssociations=" + fileAssociations + ", packagingJdk=" + packagingJdk + + additionalModulePaths + ", additionalJlinkArgs=" + + additionalJlinkArgs + ", fileAssociations=" + fileAssociations + ", packagingJdk=" + packagingJdk + ", scripts=" + scripts + ", arch=" + arch + ", templates=" + templates + "]"; }