11package com .github .stickerifier .stickerify ;
22
3- import org .apache .tools .ant .taskdefs .condition .Os ;
43import org .gradle .api .DefaultTask ;
54import org .gradle .api .file .DirectoryProperty ;
65import org .gradle .api .file .FileSystemOperations ;
76import org .gradle .api .logging .LogLevel ;
87import org .gradle .api .plugins .JavaPluginExtension ;
98import org .gradle .api .provider .ListProperty ;
109import org .gradle .api .provider .Property ;
10+ import org .gradle .api .provider .Provider ;
1111import org .gradle .api .tasks .Input ;
1212import org .gradle .api .tasks .Nested ;
1313import org .gradle .api .tasks .OutputDirectory ;
1414import org .gradle .api .tasks .TaskAction ;
15+ import org .gradle .api .tasks .TaskProvider ;
16+ import org .gradle .jvm .toolchain .JavaCompiler ;
1517import org .gradle .jvm .toolchain .JavaLauncher ;
1618import org .gradle .jvm .toolchain .JavaToolchainService ;
1719import org .gradle .process .ExecOperations ;
20+ import org .jetbrains .annotations .NotNull ;
1821
1922import javax .inject .Inject ;
2023import java .io .ByteArrayOutputStream ;
@@ -30,10 +33,10 @@ public abstract class JlinkTask extends DefaultTask {
3033 public abstract ListProperty <String > getModules ();
3134
3235 @ OutputDirectory
33- public abstract DirectoryProperty getJreDir ();
36+ public abstract DirectoryProperty getOutputDirectory ();
3437
3538 @ Nested
36- protected abstract Property <JavaLauncher > getJavaLauncher ();
39+ protected abstract Property <JavaCompiler > getJavaCompiler ();
3740
3841 @ Inject
3942 protected abstract JavaToolchainService getJavaToolchainService ();
@@ -47,20 +50,21 @@ public abstract class JlinkTask extends DefaultTask {
4750 public JlinkTask () {
4851 getOptions ().convention (List .of ());
4952 getModules ().convention (List .of ("ALL-MODULE-PATH" ));
50- getJreDir ().convention (getProject ().getLayout ().getBuildDirectory ().dir ("jre " ));
53+ getOutputDirectory ().convention (getProject ().getLayout ().getBuildDirectory ().dir ("jlink " ));
5154
5255 var toolchain = getProject ().getExtensions ().getByType (JavaPluginExtension .class ).getToolchain ();
53- getJavaLauncher ().convention (getJavaToolchainService ().launcherFor (toolchain ));
56+ getJavaCompiler ().convention (getJavaToolchainService ().compilerFor (toolchain ));
5457 }
5558
5659 @ TaskAction
5760 public void performAction () {
58- var installationPath = getJavaLauncher ().get ().getMetadata ().getInstallationPath ();
61+ var installationPath = getJavaCompiler ().get ().getMetadata ().getInstallationPath ();
5962
60- var jlink = installationPath .file (Os . isFamily ( Os . FAMILY_WINDOWS ) ? "bin \\ jlink.exe" : "bin/jlink" );
63+ var jlink = installationPath .file ("bin/jlink" );
6164 var jmods = installationPath .dir ("jmods" );
6265
63- getFs ().delete (deleteSpec -> deleteSpec .delete (getJreDir ()));
66+ var jlinkOutput = getOutputDirectory ().dir ("jre" ).get ().getAsFile ();
67+ getFs ().delete (deleteSpec -> deleteSpec .delete (jlinkOutput ));
6468
6569 var stdout = new ByteArrayOutputStream ();
6670 var stderr = new ByteArrayOutputStream ();
@@ -77,7 +81,7 @@ public void performAction() {
7781 commandLine .add ("--add-modules" );
7882 commandLine .add (String .join ("," , getModules ().get ()));
7983 commandLine .add ("--output" );
80- commandLine .add (getJreDir (). get () .toString ());
84+ commandLine .add (jlinkOutput .toString ());
8185
8286 execSpec .setCommandLine (commandLine );
8387
@@ -99,4 +103,11 @@ public void performAction() {
99103 result .assertNormalExitValue ();
100104 }
101105
106+ public static Provider <JavaLauncher > getJavaLauncher (TaskProvider <@ NotNull JlinkTask > taskProvider ) {
107+ return taskProvider .map (jlinkTask -> new JlinkJavaLauncher (
108+ jlinkTask .getJavaCompiler ().map (JavaCompiler ::getMetadata ),
109+ jlinkTask .getOutputDirectory ().file ("jre/bin/java" )
110+ ));
111+ }
112+
102113}
0 commit comments