From f7028accd677e73805b27bcab6a008d2439d6a0c Mon Sep 17 00:00:00 2001 From: Dennis Fricke Date: Tue, 25 Feb 2025 09:22:53 +0100 Subject: [PATCH 1/2] #1302 fixes java fork options serialization issue and adds tmpdir to task properties --- .../gradle/plugins/plantuml/PlantumlTask.java | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/plantuml-plugin/src/main/java/io/freefair/gradle/plugins/plantuml/PlantumlTask.java b/plantuml-plugin/src/main/java/io/freefair/gradle/plugins/plantuml/PlantumlTask.java index 22bc6d09..fa891578 100644 --- a/plantuml-plugin/src/main/java/io/freefair/gradle/plugins/plantuml/PlantumlTask.java +++ b/plantuml-plugin/src/main/java/io/freefair/gradle/plugins/plantuml/PlantumlTask.java @@ -5,6 +5,8 @@ import org.gradle.api.file.ConfigurableFileCollection; import org.gradle.api.file.DirectoryProperty; import org.gradle.api.file.FileSystemOperations; +import org.gradle.api.provider.ListProperty; +import org.gradle.api.provider.MapProperty; import org.gradle.api.provider.Property; import org.gradle.api.tasks.*; import org.gradle.process.JavaForkOptions; @@ -49,18 +51,38 @@ public abstract class PlantumlTask extends SourceTask { public abstract Property getDeleteOutputBeforeBuild(); @Input - @Getter - @Setter - private JavaForkOptions forkOptions; + public abstract MapProperty getSystemProperties(); + + @Input + public abstract ListProperty getJvmArgs(); + + @Input + public abstract Property getDebug(); + + @Input + public abstract Property getTmpDir(); public PlantumlTask() { this.setGroup("plantuml"); getWithMetadata().convention(true); getIncludePattern().convention("**/*.puml"); getDeleteOutputBeforeBuild().convention(true); + } - forkOptions = getJavaForkOptionsFactory().newJavaForkOptions(); - getForkOptions().systemProperty("java.awt.headless", true); + private JavaForkOptions getForkOptions() { + JavaForkOptions forkOptions = getJavaForkOptionsFactory().newJavaForkOptions(); + forkOptions.systemProperty("java.awt.headless", true); + getSystemProperties().get().forEach(forkOptions::systemProperty); + getJvmArgs().get().forEach(forkOptions::jvmArgs); + if (getDebug().isPresent() && getDebug().get()) { + forkOptions.setDebug(true); + } + if(getTmpDir().isPresent()) { + forkOptions.systemProperty("java.io.tmpdir", getTmpDir().get()); + } else { + forkOptions.systemProperty("java.io.tmpdir", System.getProperty("java.io.tmpdir")); + } + return forkOptions; } @TaskAction From 5ab22408a806aa917626913f0a2b7f427299664b Mon Sep 17 00:00:00 2001 From: Lars Grefer Date: Tue, 25 Feb 2025 13:08:08 +0100 Subject: [PATCH 2/2] polish --- .../gradle/plugins/plantuml/PlantumlTask.java | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/plantuml-plugin/src/main/java/io/freefair/gradle/plugins/plantuml/PlantumlTask.java b/plantuml-plugin/src/main/java/io/freefair/gradle/plugins/plantuml/PlantumlTask.java index fa891578..98ba43c9 100644 --- a/plantuml-plugin/src/main/java/io/freefair/gradle/plugins/plantuml/PlantumlTask.java +++ b/plantuml-plugin/src/main/java/io/freefair/gradle/plugins/plantuml/PlantumlTask.java @@ -28,9 +28,6 @@ public abstract class PlantumlTask extends SourceTask { @Inject protected abstract FileSystemOperations getFileSystemOperations(); - @Inject - protected abstract JavaForkOptionsFactory getJavaForkOptionsFactory(); - @Classpath public abstract ConfigurableFileCollection getPlantumlClasspath(); @@ -59,30 +56,15 @@ public abstract class PlantumlTask extends SourceTask { @Input public abstract Property getDebug(); - @Input - public abstract Property getTmpDir(); + @OutputDirectory + public abstract DirectoryProperty getTmpDir(); public PlantumlTask() { this.setGroup("plantuml"); getWithMetadata().convention(true); getIncludePattern().convention("**/*.puml"); getDeleteOutputBeforeBuild().convention(true); - } - - private JavaForkOptions getForkOptions() { - JavaForkOptions forkOptions = getJavaForkOptionsFactory().newJavaForkOptions(); - forkOptions.systemProperty("java.awt.headless", true); - getSystemProperties().get().forEach(forkOptions::systemProperty); - getJvmArgs().get().forEach(forkOptions::jvmArgs); - if (getDebug().isPresent() && getDebug().get()) { - forkOptions.setDebug(true); - } - if(getTmpDir().isPresent()) { - forkOptions.systemProperty("java.io.tmpdir", getTmpDir().get()); - } else { - forkOptions.systemProperty("java.io.tmpdir", System.getProperty("java.io.tmpdir")); - } - return forkOptions; + getTmpDir().set(getTemporaryDir()); } @TaskAction @@ -94,7 +76,25 @@ public void execute() { WorkQueue workQueue = getWorkerExecutor().processIsolation(process -> { process.getClasspath().from(getPlantumlClasspath()); - getForkOptions().copyTo(process.getForkOptions()); + + process.forkOptions(javaForkOptions -> { + + javaForkOptions.systemProperty("java.awt.headless", true); + javaForkOptions.systemProperty("java.io.tmpdir", getTmpDir().get().getAsFile().getAbsolutePath()); + + if (getSystemProperties().isPresent()) { + javaForkOptions.systemProperties(getSystemProperties().get()); + } + + if (getJvmArgs().isPresent()) { + javaForkOptions.jvmArgs(getJvmArgs().get()); + } + + if (getDebug().isPresent()) { + javaForkOptions.setDebug(getDebug().get()); + } + + }); }); for (File file : getSource().matching(p -> p.include(getIncludePattern().get()))) {