This commit is contained in:
@@ -27,9 +27,6 @@ public class JlinkPlugin implements Plugin<Project> {
|
||||
project.getPluginManager().apply(JavaLibraryPlugin.class);
|
||||
ExtensionContainer extensionContainer = project.getExtensions();
|
||||
BasePluginExtension basePluginExtension = extensionContainer.getByType(BasePluginExtension.class);
|
||||
JavaApplication javaApplicationExtension =
|
||||
Optional.ofNullable(extensionContainer.findByType(JavaApplication.class))
|
||||
.orElseGet(() -> extensionContainer.create("application", JavaApplication.class));
|
||||
|
||||
TaskContainer tasks = project.getTasks();
|
||||
Provider<JlinkTask> jlinTaskProvider = tasks.register(JLINK_TASK_NAME, JlinkTask.class, jlinkTask -> {
|
||||
|
@@ -1,6 +1,7 @@
|
||||
package net.woggioni.gradle.graalvm;
|
||||
|
||||
import lombok.SneakyThrows;
|
||||
import org.gradle.api.Action;
|
||||
import org.gradle.api.Project;
|
||||
import org.gradle.api.file.Directory;
|
||||
import org.gradle.api.file.DirectoryProperty;
|
||||
@@ -8,6 +9,7 @@ import org.gradle.api.file.FileCollection;
|
||||
import org.gradle.api.file.ProjectLayout;
|
||||
import org.gradle.api.logging.Logger;
|
||||
import org.gradle.api.logging.Logging;
|
||||
import org.gradle.api.model.ObjectFactory;
|
||||
import org.gradle.api.plugins.BasePluginExtension;
|
||||
import org.gradle.api.plugins.ExtensionContainer;
|
||||
import org.gradle.api.plugins.JavaApplication;
|
||||
@@ -25,6 +27,8 @@ import org.gradle.internal.jvm.JavaModuleDetector;
|
||||
import org.gradle.jvm.toolchain.JavaInstallationMetadata;
|
||||
import org.gradle.jvm.toolchain.JavaLauncher;
|
||||
import org.gradle.jvm.toolchain.JavaToolchainService;
|
||||
import org.gradle.jvm.toolchain.JavaToolchainSpec;
|
||||
import org.gradle.jvm.toolchain.internal.DefaultToolchainSpec;
|
||||
import org.gradle.process.CommandLineArgumentProvider;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@@ -42,6 +46,13 @@ import static net.woggioni.gradle.graalvm.Constants.GRAALVM_TASK_GROUP;
|
||||
|
||||
public abstract class JlinkTask extends Exec {
|
||||
|
||||
private final JavaToolchainSpec toolchain;
|
||||
|
||||
public JavaToolchainSpec toolchain(Action<? super JavaToolchainSpec> action) {
|
||||
action.execute(toolchain);
|
||||
return toolchain;
|
||||
}
|
||||
|
||||
@Classpath
|
||||
public abstract Property<FileCollection> getClasspath();
|
||||
|
||||
@@ -59,9 +70,24 @@ public abstract class JlinkTask extends Exec {
|
||||
@Input
|
||||
public abstract ListProperty<String> getAdditionalModules();
|
||||
|
||||
@Input
|
||||
public abstract ListProperty<String> getLimitModules();
|
||||
|
||||
@Input
|
||||
public abstract Property<Boolean> getBindServices();
|
||||
|
||||
@Input
|
||||
public abstract Property<Boolean> getIncludeHeaderFiles();
|
||||
|
||||
@Input
|
||||
public abstract Property<Boolean> getIncludeManPages();
|
||||
|
||||
@Input
|
||||
public abstract Property<Boolean> getStripDebug();
|
||||
|
||||
@Input
|
||||
public abstract Property<Boolean> getGenerateCdsArchive();
|
||||
|
||||
@Input
|
||||
@Optional
|
||||
public abstract Property<Integer> getCompressionLevel();
|
||||
@@ -74,7 +100,8 @@ public abstract class JlinkTask extends Exec {
|
||||
|
||||
private static final Logger log = Logging.getLogger(JlinkTask.class);
|
||||
|
||||
public JlinkTask() {
|
||||
@Inject
|
||||
public JlinkTask(ObjectFactory objects) {
|
||||
Project project = getProject();
|
||||
setGroup(GRAALVM_TASK_GROUP);
|
||||
setDescription(
|
||||
@@ -86,17 +113,26 @@ public abstract class JlinkTask extends Exec {
|
||||
getMainClass().convention(javaApplication.getMainClass());
|
||||
getMainModule().convention(javaApplication.getMainModule());
|
||||
}
|
||||
getIncludeManPages().convention(false);
|
||||
getIncludeHeaderFiles().convention(false);
|
||||
getGenerateCdsArchive().convention(true);
|
||||
getStripDebug().convention(true);
|
||||
getClasspath().convention(project.files());
|
||||
ProjectLayout layout = project.getLayout();
|
||||
toolchain = getObjectFactory().newInstance(DefaultToolchainSpec.class);
|
||||
JavaToolchainService javaToolchainService = ext.findByType(JavaToolchainService.class);
|
||||
JavaPluginExtension javaPluginExtension = ext.findByType(JavaPluginExtension.class);
|
||||
Provider<Directory> graalHomeDirectoryProvider = ofNullable(javaPluginExtension.getToolchain()).map(javaToolchainSpec ->
|
||||
javaToolchainService.launcherFor(javaToolchainSpec)
|
||||
).map(javaLauncher ->
|
||||
javaLauncher.map(JavaLauncher::getMetadata).map(JavaInstallationMetadata::getInstallationPath)
|
||||
).orElseGet(() -> layout.dir(project.provider(() ->project.file(System.getProperty("java.home")))));
|
||||
Provider<Directory> graalHomeDirectoryProvider = javaToolchainService.launcherFor(it -> {
|
||||
it.getLanguageVersion().set(toolchain.getLanguageVersion());
|
||||
it.getVendor().set(toolchain.getVendor());
|
||||
it.getImplementation().set(toolchain.getImplementation());
|
||||
}).map(javaLauncher ->
|
||||
javaLauncher.getMetadata().getInstallationPath()
|
||||
).orElse(layout.dir(project.provider(() -> project.file(System.getProperty("java.home")))));
|
||||
getGraalVmHome().convention(graalHomeDirectoryProvider);
|
||||
|
||||
getGraalVmHome().convention(graalHomeDirectoryProvider);
|
||||
getAdditionalModules().convention(new ArrayList<>());
|
||||
getLimitModules().convention(new ArrayList<>());
|
||||
getBindServices().convention(false);
|
||||
|
||||
BasePluginExtension basePluginExtension =
|
||||
@@ -118,7 +154,7 @@ public abstract class JlinkTask extends Exec {
|
||||
@SneakyThrows
|
||||
public Iterable<String> asArguments() {
|
||||
List<String> result = new ArrayList<>();
|
||||
final Property<Integer> compressionLevelProperty= getCompressionLevel();
|
||||
final Property<Integer> compressionLevelProperty = getCompressionLevel();
|
||||
if(compressionLevelProperty.isPresent()) {
|
||||
result.add(String.format("--compress=zip-%d", compressionLevelProperty.get()));
|
||||
}
|
||||
@@ -152,6 +188,28 @@ public abstract class JlinkTask extends Exec {
|
||||
result.add(String.join(",", modules2BeAdded));
|
||||
}
|
||||
}
|
||||
List<String> limitModules = getLimitModules().get();
|
||||
if(!limitModules.isEmpty()) {
|
||||
result.add("--limit-modules");
|
||||
final List<String> modules2BeAdded = new ArrayList<>();
|
||||
modules2BeAdded.addAll(limitModules);
|
||||
if(!modules2BeAdded.isEmpty()) {
|
||||
result.add(String.join(",", modules2BeAdded));
|
||||
}
|
||||
}
|
||||
|
||||
if(getStripDebug().getOrElse(false)) {
|
||||
result.add("--strip-debug");
|
||||
}
|
||||
if(getGenerateCdsArchive().getOrElse(false)) {
|
||||
result.add("--generate-cds-archive");
|
||||
}
|
||||
if(!getIncludeHeaderFiles().getOrElse(true)) {
|
||||
result.add("--no-header-files");
|
||||
}
|
||||
if(!getIncludeManPages().getOrElse(true)) {
|
||||
result.add("--no-man-pages");
|
||||
}
|
||||
return Collections.unmodifiableList(result);
|
||||
}
|
||||
};
|
||||
|
Reference in New Issue
Block a user