From 6558abf6674f078d1020f31bd9a433b99f3a335a Mon Sep 17 00:00:00 2001 From: Ben Foster Date: Wed, 3 Jul 2024 13:16:53 -0400 Subject: [PATCH] Get it to compile on gradle 8 Addresses immediate errors and deprecation warnings Has not actually been tested for runtime correctness Fixes #1 --- build.gradle | 21 ++++----- .../task/ExtendedCreateStartScripts.groovy | 43 +++++++++++-------- ...dedJavaStartScriptGenerationDetails.groovy | 11 +++-- ...xternalTemplateStartScriptGenerator.groovy | 18 +++++--- 4 files changed, 55 insertions(+), 38 deletions(-) diff --git a/build.gradle b/build.gradle index 176bcbb..e2147ab 100644 --- a/build.gradle +++ b/build.gradle @@ -4,17 +4,18 @@ * See LICENSE at the project root directory. */ -apply plugin: 'groovy' -apply plugin: 'java' -apply plugin: 'maven' -apply plugin: 'maven-publish' -apply plugin: 'eclipse' +plugins { + id('groovy') + id('java-library') + id('maven-publish') + id('eclipse') +} group = 'kkdt.gradle.api' -version = '0.1' +version = '0.2' repositories { - jcenter() + mavenCentral() } eclipse { @@ -29,9 +30,9 @@ ext { } dependencies { - compile gradleApi() - compile localGroovy() - compile 'com.google.guava:guava:22.0' + implementation gradleApi() + implementation localGroovy() + implementation 'com.google.guava:guava:33.2.1-jre' } publishing { diff --git a/src/main/groovy/kkdt/gradle/api/task/ExtendedCreateStartScripts.groovy b/src/main/groovy/kkdt/gradle/api/task/ExtendedCreateStartScripts.groovy index e4c74b3..3883593 100644 --- a/src/main/groovy/kkdt/gradle/api/task/ExtendedCreateStartScripts.groovy +++ b/src/main/groovy/kkdt/gradle/api/task/ExtendedCreateStartScripts.groovy @@ -5,20 +5,17 @@ */ package kkdt.gradle.api.task +import kkdt.gradle.api.task.scripts.ExtendedJavaStartScriptGenerationDetails +import kkdt.gradle.api.task.scripts.ExternalScriptGenerator +import kkdt.gradle.api.task.scripts.ExternalScriptTemplate +import kkdt.gradle.api.task.scripts.ExternalTemplateStartScriptGenerator +import org.gradle.api.file.FileCollection import org.gradle.api.internal.plugins.DefaultJavaAppStartScriptGenerationDetails import org.gradle.api.internal.plugins.StartScriptTemplateBindingFactory import org.gradle.api.tasks.application.CreateStartScripts import org.gradle.jvm.application.scripts.JavaAppStartScriptGenerationDetails -import org.gradle.util.CollectionUtils -import org.gradle.util.TextUtil -import com.google.common.base.Function -import com.google.common.collect.Iterables - -import kkdt.gradle.api.task.scripts.ExtendedJavaStartScriptGenerationDetails -import kkdt.gradle.api.task.scripts.ExternalScriptGenerator -import kkdt.gradle.api.task.scripts.ExternalScriptTemplate -import kkdt.gradle.api.task.scripts.ExternalTemplateStartScriptGenerator +import java.util.stream.Collectors /** *

@@ -39,9 +36,8 @@ class ExtendedCreateStartScripts extends CreateStartScripts { /** * An extended details is a map of already transformed key-value pairs. */ - def extendedDetails = [:]; + Map extendedDetails = [:]; def scriptRelativePath; - def libRelativePath; def includeWindowsScript = false; @Override @@ -49,14 +45,14 @@ class ExtendedCreateStartScripts extends CreateStartScripts { if(unixScriptTemplate == null) { logger.info('unixScriptTemplate not provided, using default unixStartScriptGenerator: ' + unixStartScriptGenerator.class.name); } else { - logger.info('unixScriptTemplate file used for script generation: ' + unixScriptTemplate + ", " + unixScriptTemplate.class.name); + logger.info("unixScriptTemplate file used for script generation: ${unixScriptTemplate} + ${unixScriptTemplate.class.name}"); // build the template def fileTemplate = new ExternalScriptTemplate(); fileTemplate.file = unixScriptTemplate; // configure the custom unix script template generator ExternalTemplateStartScriptGenerator unixScriptGenerator = new ExternalTemplateStartScriptGenerator(); unixScriptGenerator.template = fileTemplate; - unixScriptGenerator.lineSeparator = TextUtil.getUnixLineSeparator(); + unixScriptGenerator.lineSeparator = "\n"; unixScriptGenerator.bindingFactory = StartScriptTemplateBindingFactory.unix(); // set the task unix script template generator to the custom generator unixStartScriptGenerator = unixScriptGenerator; @@ -89,23 +85,34 @@ class ExtendedCreateStartScripts extends CreateStartScripts { applicationName, optsEnvironmentVar, exitEnvironmentVar, - mainClassName, - CollectionUtils.toStringList(defaultJvmOpts), - CollectionUtils.toStringList(getRelativeClasspath()), + mainClass.getOrNull(), + toStringList(defaultJvmOpts), + toStringList(getRelativeClasspath()), + getRelativePath(javaModuleDetector.inferModulePath(mainModule.isPresent(), getClasspath())), scriptRelativePath == null ? 'lib' + File.separator + unixScript.name : scriptRelativePath, null); logger.info('Generator set with extended details: ' + extendedDetails) scriptDetails.extendedDetails = extendedDetails; return scriptDetails; } + + private static List getRelativePath(FileCollection path) { + return path.getFiles().stream().map(input -> "lib/" + input.getName()).collect(Collectors.toList()); + } + + private static List toStringList(Iterable items) { + List retVal = new ArrayList<>() + items.forEach { item -> retVal.add(item.toString()) } + return retVal; + } // Copied from parent source code - private Iterable getRelativeClasspath() { + /*private Iterable getRelativeClasspath() { return Iterables.transform(getClasspath().getFiles(), new Function() { @Override public String apply(File input) { return libRelativePath == null ? 'lib' + File.separator + input.name : libRelativePath + File.separator + input.name; } }); - } + }*/ } diff --git a/src/main/groovy/kkdt/gradle/api/task/scripts/ExtendedJavaStartScriptGenerationDetails.groovy b/src/main/groovy/kkdt/gradle/api/task/scripts/ExtendedJavaStartScriptGenerationDetails.groovy index 182ae71..133728b 100644 --- a/src/main/groovy/kkdt/gradle/api/task/scripts/ExtendedJavaStartScriptGenerationDetails.groovy +++ b/src/main/groovy/kkdt/gradle/api/task/scripts/ExtendedJavaStartScriptGenerationDetails.groovy @@ -5,8 +5,6 @@ */ package kkdt.gradle.api.task.scripts -import java.util.List - import org.gradle.api.internal.plugins.DefaultJavaAppStartScriptGenerationDetails import org.gradle.jvm.application.scripts.JavaAppStartScriptGenerationDetails @@ -27,7 +25,7 @@ class ExtendedJavaStartScriptGenerationDetails implements JavaAppStartScriptGene /** * An extended details is a map of already transformed key-value pairs. */ - def extendedDetails = [:]; + Map extendedDetails = [:]; @Override public String getAppNameSystemProperty() { @@ -43,7 +41,12 @@ class ExtendedJavaStartScriptGenerationDetails implements JavaAppStartScriptGene public List getClasspath() { return details.getClasspath(); } - + + @Override + List getModulePath() { + return details.getModulePath(); + } + @Override public List getDefaultJvmOpts() { return details.getDefaultJvmOpts(); diff --git a/src/main/groovy/kkdt/gradle/api/task/scripts/ExternalTemplateStartScriptGenerator.groovy b/src/main/groovy/kkdt/gradle/api/task/scripts/ExternalTemplateStartScriptGenerator.groovy index a415fe9..caa9067 100644 --- a/src/main/groovy/kkdt/gradle/api/task/scripts/ExternalTemplateStartScriptGenerator.groovy +++ b/src/main/groovy/kkdt/gradle/api/task/scripts/ExternalTemplateStartScriptGenerator.groovy @@ -5,16 +5,17 @@ */ package kkdt.gradle.api.task.scripts +import groovy.text.SimpleTemplateEngine +import groovy.text.Template import org.gradle.api.Transformer -import org.gradle.api.internal.plugins.StartScriptTemplateBindingFactory import org.gradle.api.resources.TextResource +import org.gradle.internal.InternalTransformer import org.gradle.internal.io.IoUtils import org.gradle.jvm.application.scripts.JavaAppStartScriptGenerationDetails import org.gradle.jvm.application.scripts.TemplateBasedScriptGenerator -import org.gradle.util.TextUtil -import groovy.text.SimpleTemplateEngine -import groovy.text.Template +import javax.annotation.Nullable +import java.util.regex.Pattern /** *

@@ -56,18 +57,23 @@ class ExternalTemplateStartScriptGenerator implements TemplateBasedScriptGenerat } private String generateStartScriptContentFromTemplate(final Map binding) { - return IoUtils.get(template.asReader(), new Transformer() { + return IoUtils.get(template.asReader(), new InternalTransformer() { @Override public String transform(Reader reader) { try { SimpleTemplateEngine engine = new SimpleTemplateEngine(); Template template = engine.createTemplate(reader); String output = template.make(binding).toString(); - return TextUtil.convertLineSeparators(output, lineSeparator); + return convertLineSeparators(output, lineSeparator); } catch (IOException e) { throw e; } } }); } + + private static String convertLineSeparators(@Nullable String str, String sep) { + def pattern = Pattern.compile("\r\n|\r|\n") + return str == null ? null : pattern.matcher(str).replaceAll(sep); + } }