|
7 | 7 | import java.util.List; |
8 | 8 | import java.util.Map; |
9 | 9 |
|
10 | | -import org.gradle.api.tasks.Input; |
11 | | -import org.gradle.api.tasks.InputDirectory; |
12 | | -import org.gradle.api.tasks.InputFile; |
13 | | -import org.gradle.api.tasks.Optional; |
14 | | -import org.gradle.api.tasks.OutputDirectory; |
| 10 | +import org.gradle.api.Project; |
| 11 | +import org.gradle.api.internal.provider.Providers; |
| 12 | +import org.gradle.api.plugins.JavaPluginExtension; |
| 13 | +import org.gradle.api.provider.Property; |
| 14 | +import org.gradle.api.provider.Provider; |
| 15 | +import org.gradle.api.tasks.*; |
15 | 16 |
|
16 | 17 | import groovy.lang.Closure; |
17 | 18 | import io.github.fvarrui.javapackager.model.LinuxConfig; |
|
21 | 22 | import io.github.fvarrui.javapackager.model.WindowsConfig; |
22 | 23 | import io.github.fvarrui.javapackager.packagers.Packager; |
23 | 24 | import io.github.fvarrui.javapackager.packagers.PackagerFactory; |
| 25 | +import org.gradle.jvm.toolchain.JavaLauncher; |
| 26 | +import org.gradle.jvm.toolchain.JavaToolchainService; |
| 27 | +import org.gradle.jvm.toolchain.JavaToolchainSpec; |
24 | 28 |
|
25 | 29 | /** |
26 | 30 | * Packaging task fro Gradle |
@@ -90,6 +94,18 @@ public File getAssetsDir() { |
90 | 94 | public void setAssetsDir(File assetsDir) { |
91 | 95 | this.assetsDir = assetsDir; |
92 | 96 | } |
| 97 | + |
| 98 | + @InputDirectory |
| 99 | + @Optional |
| 100 | + private File packagingJdk; |
| 101 | + |
| 102 | + public File getPackagingJdk() { |
| 103 | + return packagingJdk; |
| 104 | + } |
| 105 | + |
| 106 | + public void setPackagingJdk(File packagingJdk) { |
| 107 | + this.packagingJdk = packagingJdk; |
| 108 | + } |
93 | 109 |
|
94 | 110 | @Input |
95 | 111 | @Optional |
@@ -533,6 +549,7 @@ protected Packager createPackager() throws Exception { |
533 | 549 | .additionalResources(defaultIfNull(additionalResources, extension.getAdditionalResources())) |
534 | 550 | .administratorRequired(defaultIfNull(administratorRequired, extension.getAdministratorRequired())) |
535 | 551 | .version(defaultIfNull(version, extension.getVersion(), getProject().getVersion().toString())) |
| 552 | + .packagingJdk(defaultIfNull(packagingJdk, getDefaultToolchain(getProject()))) |
536 | 553 | .assetsDir(defaultIfNull(assetsDir, extension.getAssetsDir())) |
537 | 554 | .bundleJre(defaultIfNull(bundleJre, extension.getBundleJre())) |
538 | 555 | .copyDependencies(defaultIfNull(copyDependencies, extension.getCopyDependencies())) |
@@ -568,5 +585,19 @@ protected Packager createPackager() throws Exception { |
568 | 585 | .winConfig(defaultIfNull(winConfig, extension.getWinConfig())); |
569 | 586 |
|
570 | 587 | } |
| 588 | + |
| 589 | + private File getDefaultToolchain(Project project) { |
| 590 | + // Default toolchain |
| 591 | + JavaToolchainSpec toolchain = project.getExtensions().getByType(JavaPluginExtension.class).getToolchain(); |
| 592 | + |
| 593 | + // acquire a provider that returns the launcher for the toolchain |
| 594 | + JavaToolchainService service = project.getExtensions().getByType(JavaToolchainService.class); |
| 595 | + Provider<JavaLauncher> defaultLauncher = service.launcherFor(toolchain).orElse(Providers.notDefined()); |
| 596 | + |
| 597 | + if (defaultLauncher.isPresent()) { |
| 598 | + return defaultLauncher.get().getMetadata().getInstallationPath().getAsFile(); |
| 599 | + } |
| 600 | + return new File(System.getProperty("java.home")); // Use java.home as fallback |
| 601 | + } |
571 | 602 |
|
572 | 603 | } |
0 commit comments