Skip to content

Commit 72712ee

Browse files
Create custom javaLauncher
1 parent 83d3f1c commit 72712ee

File tree

3 files changed

+41
-16
lines changed

3 files changed

+41
-16
lines changed

build.gradle

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import org.apache.tools.ant.taskdefs.condition.Os
21
import com.github.stickerifier.stickerify.JlinkTask
32

43
plugins {
@@ -59,12 +58,8 @@ def jlink = tasks.register('jlink', JlinkTask) {
5958
}
6059

6160
test {
62-
dependsOn jlink
63-
64-
def jre = jlink.map { it.jreDir }
65-
inputs.dir jre
66-
67-
executable = jre.get().file(Os.isFamily(Os.FAMILY_WINDOWS) ? 'bin\\java.exe' : 'bin/java').get()
61+
inputs.dir jlink.get().outputDirectory
62+
javaLauncher = JlinkTask.getJavaLauncher(jlink)
6863

6964
useJUnitPlatform()
7065
finalizedBy jacocoTestReport
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.github.stickerifier.stickerify;
2+
3+
import org.gradle.api.file.RegularFile;
4+
import org.gradle.api.provider.Provider;
5+
import org.gradle.jvm.toolchain.JavaInstallationMetadata;
6+
import org.gradle.jvm.toolchain.JavaLauncher;
7+
import org.jetbrains.annotations.NotNull;
8+
9+
public record JlinkJavaLauncher(Provider<JavaInstallationMetadata> metadata, Provider<RegularFile> executablePath) implements JavaLauncher {
10+
@Override
11+
public @NotNull JavaInstallationMetadata getMetadata() {
12+
return metadata.get();
13+
}
14+
15+
@Override
16+
public @NotNull RegularFile getExecutablePath() {
17+
return executablePath.get();
18+
}
19+
}

buildSrc/src/main/java/com/github/stickerifier/stickerify/JlinkTask.java

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,23 @@
11
package com.github.stickerifier.stickerify;
22

3-
import org.apache.tools.ant.taskdefs.condition.Os;
43
import org.gradle.api.DefaultTask;
54
import org.gradle.api.file.DirectoryProperty;
65
import org.gradle.api.file.FileSystemOperations;
76
import org.gradle.api.logging.LogLevel;
87
import org.gradle.api.plugins.JavaPluginExtension;
98
import org.gradle.api.provider.ListProperty;
109
import org.gradle.api.provider.Property;
10+
import org.gradle.api.provider.Provider;
1111
import org.gradle.api.tasks.Input;
1212
import org.gradle.api.tasks.Nested;
1313
import org.gradle.api.tasks.OutputDirectory;
1414
import org.gradle.api.tasks.TaskAction;
15+
import org.gradle.api.tasks.TaskProvider;
16+
import org.gradle.jvm.toolchain.JavaCompiler;
1517
import org.gradle.jvm.toolchain.JavaLauncher;
1618
import org.gradle.jvm.toolchain.JavaToolchainService;
1719
import org.gradle.process.ExecOperations;
20+
import org.jetbrains.annotations.NotNull;
1821

1922
import javax.inject.Inject;
2023
import 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

Comments
 (0)