Skip to content

Commit 5ccb9bb

Browse files
Create JlinkTask for better usage
1 parent 57f35d8 commit 5ccb9bb

File tree

6 files changed

+130
-67
lines changed

6 files changed

+130
-67
lines changed

.editorconfig

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -103,14 +103,6 @@ ij_java_doc_param_description_on_new_line = false
103103
ij_java_doc_preserve_line_breaks = false
104104
ij_java_doc_use_throws_not_exception_tag = true
105105
ij_java_else_on_new_line = false
106-
ij_java_entity_dd_suffix = EJB
107-
ij_java_entity_eb_suffix = Bean
108-
ij_java_entity_hi_suffix = Home
109-
ij_java_entity_lhi_prefix = Local
110-
ij_java_entity_lhi_suffix = Home
111-
ij_java_entity_li_prefix = Local
112-
ij_java_entity_pk_class = java.lang.String
113-
ij_java_entity_vo_suffix = VO
114106
ij_java_enum_constants_wrap = off
115107
ij_java_extends_keyword_wrap = off
116108
ij_java_extends_list_wrap = off
@@ -147,8 +139,6 @@ ij_java_layout_static_imports_separately = true
147139
ij_java_line_comment_add_space = false
148140
ij_java_line_comment_add_space_on_reformat = false
149141
ij_java_line_comment_at_first_column = true
150-
ij_java_message_dd_suffix = EJB
151-
ij_java_message_eb_suffix = Bean
152142
ij_java_method_annotation_wrap = split_into_lines
153143
ij_java_method_brace_style = end_of_line
154144
ij_java_method_call_chain_wrap = off
@@ -177,13 +167,6 @@ ij_java_resource_list_wrap = off
177167
ij_java_rparen_on_new_line_in_annotation = false
178168
ij_java_rparen_on_new_line_in_deconstruction_pattern = true
179169
ij_java_rparen_on_new_line_in_record_header = false
180-
ij_java_session_dd_suffix = EJB
181-
ij_java_session_eb_suffix = Bean
182-
ij_java_session_hi_suffix = Home
183-
ij_java_session_lhi_prefix = Local
184-
ij_java_session_lhi_suffix = Home
185-
ij_java_session_li_prefix = Local
186-
ij_java_session_si_suffix = Service
187170
ij_java_space_after_closing_angle_bracket_in_type_argument = false
188171
ij_java_space_after_colon = true
189172
ij_java_space_after_comma = true

Dockerfile

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,8 @@ RUN curl -L --fail --retry 3 --retry-delay 5 "$LIBWEBP_URL" -O && \
1515
rm "$LIBWEBP_FILE"
1616

1717
ENV GRADLE_OPTS="-Dorg.gradle.daemon=false"
18-
COPY settings.gradle build.gradle gradlew ./
19-
COPY gradle gradle
20-
RUN --mount=type=cache,target=/root/.gradle ./gradlew dependencies
2118
COPY . .
22-
RUN --mount=type=cache,target=/root/.gradle ./gradlew jre shadowJar
19+
RUN --mount=type=cache,target=/root/.gradle ./gradlew jlink shadowJar
2320

2421
FROM alpine AS bot
2522

build.gradle

Lines changed: 10 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import org.apache.tools.ant.taskdefs.condition.Os
2+
import com.github.stickerifier.stickerify.JlinkTask
23

34
plugins {
45
alias(libs.plugins.shadow)
@@ -49,57 +50,20 @@ java {
4950
}
5051
}
5152

52-
tasks.withType(JavaCompile).configureEach {
53-
options.encoding = 'UTF-8'
54-
}
55-
56-
def jreOutputDir = layout.buildDirectory.dir('jre')
57-
tasks.register('jre') {
58-
inputs.property('options', ['--strip-debug', '--no-header-files', '--no-man-pages'])
59-
inputs.property('modules', ['java.desktop', 'java.instrument', 'java.naming', 'java.sql', 'jdk.crypto.ec', 'jdk.unsupported'])
60-
61-
outputs.dir(jreOutputDir)
62-
63-
doFirst {
64-
delete(jreOutputDir)
65-
}
66-
67-
def javaLauncher = javaToolchains.launcherFor(java.toolchain)
68-
69-
doLast {
70-
def installationPath = javaLauncher.get().metadata.installationPath
53+
def jlink = tasks.register('jlink', JlinkTask) {
54+
options = ['--strip-debug', '--no-header-files', '--no-man-pages']
55+
modules = ['java.desktop', 'java.instrument', 'java.naming', 'java.sql', 'jdk.crypto.ec', 'jdk.unsupported']
7156

72-
def jlink = installationPath.file(Os.isFamily(Os.FAMILY_WINDOWS) ? 'bin\\jlink.exe' : 'bin/jlink')
73-
def jmods = installationPath.dir('jmods')
74-
75-
def output = providers.exec {
76-
ignoreExitValue = true
77-
commandLine = [
78-
jlink.toString(), '-v',
79-
*(inputs.properties['options'] as List),
80-
'--module-path', jmods.toString(),
81-
'--add-modules', (inputs.properties['modules'] as List).join(','),
82-
'--output', jreOutputDir.get().toString()
83-
]
84-
}
85-
86-
def result = output.result.get()
87-
if (result.exitValue == 0) {
88-
logger.info(output.standardOutput.asText.get())
89-
} else {
90-
logger.log(LogLevel.ERROR, output.standardError.asText.get())
91-
}
92-
93-
result.assertNormalExitValue()
94-
result.rethrowFailure()
95-
}
57+
group = 'build'
58+
description = 'Generates a minimal JRE for the project.'
9659
}
9760

9861
test {
99-
dependsOn tasks.named('jre')
100-
inputs.dir(jreOutputDir)
62+
dependsOn jlink
10163

102-
executable = jreOutputDir.get().file(Os.isFamily(Os.FAMILY_WINDOWS) ? 'bin\\java.exe' : 'bin/java')
64+
def jre = jlink.get().jreDir
65+
inputs.dir jre
66+
executable = jre.get().file(Os.isFamily(Os.FAMILY_WINDOWS) ? 'bin\\java.exe' : 'bin/java')
10367

10468
useJUnitPlatform()
10569
finalizedBy jacocoTestReport

buildSrc/build.gradle

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
plugins {
2+
id 'java-library'
3+
}
4+
5+
repositories {
6+
gradlePluginPortal()
7+
}
8+
9+
java {
10+
toolchain {
11+
languageVersion = JavaLanguageVersion.of(24)
12+
vendor = JvmVendorSpec.AZUL
13+
}
14+
}
15+
16+
tasks.withType(JavaCompile).configureEach {
17+
options.encoding = 'UTF-8'
18+
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
package com.github.stickerifier.stickerify;
2+
3+
import org.apache.tools.ant.taskdefs.condition.Os;
4+
import org.gradle.api.DefaultTask;
5+
import org.gradle.api.file.DirectoryProperty;
6+
import org.gradle.api.file.FileSystemOperations;
7+
import org.gradle.api.logging.LogLevel;
8+
import org.gradle.api.plugins.JavaPluginExtension;
9+
import org.gradle.api.provider.ListProperty;
10+
import org.gradle.api.provider.Property;
11+
import org.gradle.api.tasks.Input;
12+
import org.gradle.api.tasks.Nested;
13+
import org.gradle.api.tasks.OutputDirectory;
14+
import org.gradle.api.tasks.TaskAction;
15+
import org.gradle.jvm.toolchain.JavaLauncher;
16+
import org.gradle.jvm.toolchain.JavaToolchainService;
17+
import org.gradle.process.ExecOperations;
18+
19+
import javax.inject.Inject;
20+
import java.io.ByteArrayOutputStream;
21+
import java.util.ArrayList;
22+
import java.util.List;
23+
24+
public abstract class JlinkTask extends DefaultTask {
25+
26+
@Input
27+
public abstract ListProperty<String> getOptions();
28+
29+
@Input
30+
public abstract ListProperty<String> getModules();
31+
32+
@OutputDirectory
33+
public abstract DirectoryProperty getJreDir();
34+
35+
@Nested
36+
protected abstract Property<JavaLauncher> getJavaLauncher();
37+
38+
@Inject
39+
protected abstract JavaToolchainService getJavaToolchainService();
40+
41+
@Inject
42+
protected abstract FileSystemOperations getFs();
43+
44+
@Inject
45+
protected abstract ExecOperations getExec();
46+
47+
public JlinkTask() {
48+
getOptions().convention(List.of());
49+
getModules().convention(List.of("ALL-MODULE-PATH"));
50+
getJreDir().convention(getProject().getLayout().getBuildDirectory().dir("jre"));
51+
52+
var toolchain = getProject().getExtensions().getByType(JavaPluginExtension.class).getToolchain();
53+
getJavaLauncher().convention(getJavaToolchainService().launcherFor(toolchain));
54+
}
55+
56+
@TaskAction
57+
public void performAction() {
58+
var installationPath = getJavaLauncher().get().getMetadata().getInstallationPath();
59+
60+
var jlink = installationPath.file(Os.isFamily(Os.FAMILY_WINDOWS) ? "bin\\jlink.exe" : "bin/jlink");
61+
var jmods = installationPath.dir("jmods");
62+
63+
getFs().delete(deleteSpec -> deleteSpec.delete(getJreDir()));
64+
65+
var stdout = new ByteArrayOutputStream();
66+
var stderr = new ByteArrayOutputStream();
67+
68+
var result = getExec().exec(execSpec -> {
69+
execSpec.setIgnoreExitValue(true);
70+
71+
var commandLine = new ArrayList<String>();
72+
commandLine.add(jlink.toString());
73+
commandLine.add("-v");
74+
commandLine.addAll(getOptions().get());
75+
commandLine.add("--module-path");
76+
commandLine.add(jmods.toString());
77+
commandLine.add("--add-modules");
78+
commandLine.add(String.join(",", getModules().get()));
79+
commandLine.add("--output");
80+
commandLine.add(getJreDir().get().toString());
81+
82+
execSpec.setCommandLine(commandLine);
83+
84+
execSpec.setStandardOutput(stdout);
85+
execSpec.setErrorOutput(stderr);
86+
});
87+
88+
if (result.getExitValue() == 0) {
89+
getLogger().info(stdout.toString());
90+
} else {
91+
getLogger().log(LogLevel.ERROR, stderr.toString());
92+
}
93+
94+
result.assertNormalExitValue();
95+
result.rethrowFailure();
96+
}
97+
98+
}

gradle.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
org.gradle.cache = true
2+
org.gradle.configuration-cache = true
3+
org.gradle.jvmargs=-Dfile.encoding=UTF-8

0 commit comments

Comments
 (0)