Skip to content

Commit 40903a2

Browse files
committed
issue #200: Generated sh startscript fails to start
1 parent 562b45a commit 40903a2

1 file changed

Lines changed: 23 additions & 2 deletions

File tree

src/main/java/org/javamodularity/moduleplugin/tasks/StartScriptsMutator.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.gradle.api.logging.Logging;
1313
import org.gradle.api.tasks.JavaExec;
1414
import org.gradle.api.tasks.application.CreateStartScripts;
15+
import org.gradle.util.GradleVersion;
1516
import org.javamodularity.moduleplugin.extensions.RunModuleOptions;
1617
import org.javamodularity.moduleplugin.internal.TaskOption;
1718

@@ -21,6 +22,7 @@
2122
import java.nio.file.Path;
2223
import java.util.ArrayList;
2324
import java.util.List;
25+
import java.util.regex.Pattern;
2426

2527
public class StartScriptsMutator extends AbstractExecutionMutator {
2628
private static final Logger LOGGER = Logging.getLogger(StartScriptsMutator.class);
@@ -122,8 +124,14 @@ private void removeClasspathArgs(CreateStartScripts startScriptsTask) {
122124
Path outputDir = startScriptsTask.getOutputDir().toPath();
123125
Path bashScript = outputDir.resolve(startScriptsTask.getApplicationName());
124126

125-
replaceScriptContent(bashScript, "eval set -- \\$DEFAULT_JVM_OPTS \\$JAVA_OPTS \\$(\\S+).*", "eval set -- \\$JAVA_OPTS \\$$1 \\$DEFAULT_JVM_OPTS \\\"\\$APP_ARGS\\\"");
126-
127+
if(GradleVersion.current().compareTo(GradleVersion.version("7.2")) < 0) {
128+
replaceScriptContent(bashScript, "eval set -- \\$DEFAULT_JVM_OPTS \\$JAVA_OPTS \\$(\\S+).*", "eval set -- \\$JAVA_OPTS \\$$1 \\$DEFAULT_JVM_OPTS \\\"\\$APP_ARGS\\\"");
129+
} else {
130+
replaceScriptContent(bashScript, "app_path=\\$0", "app_path=\\$0\nAPP_ARGS=`echo \"\\$@\"`");
131+
String appOpts = getAppOptsVariableName(bashScript);
132+
replaceScriptContent(bashScript, "exec \"\\$JAVACMD\" \"\\$@\"",
133+
"eval set -- \\$JAVA_OPTS " + appOpts + " \\$DEFAULT_JVM_OPTS \\\"\\$APP_ARGS\\\"\nexec \"\\$JAVACMD\" \"\\$@\"");
134+
}
127135

128136
Path batFile = outputDir.resolve(startScriptsTask.getApplicationName() + ".bat");
129137
replaceScriptContent(batFile, "\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %(\\S+)%.*", "\"%JAVA_EXE%\" %JAVA_OPTS% %$1% %DEFAULT_JVM_OPTS% %CMD_LINE_ARGS%");
@@ -155,6 +163,19 @@ private static String getContent(Path path) {
155163
}
156164
}
157165

166+
private static final Pattern APP_OPTS_VARIABLE_NAME = Pattern.compile("(?s).*\\$DEFAULT_JVM_OPTS \\$JAVA_OPTS \\$(\\w+).*");
167+
private static String getAppOptsVariableName(Path path) {
168+
try {
169+
var m = APP_OPTS_VARIABLE_NAME.matcher(Files.readString(path));
170+
if(m.matches()) {
171+
return "\\$" + m.group(1);
172+
}
173+
} catch (IOException e) {
174+
throw new GradleException("Couldn't read run script in " + path);
175+
}
176+
return "";
177+
}
178+
158179
private static void replaceScriptContent(Path path, String regex, String replacement) {
159180
try {
160181
String updatedScriptContent = Files.readString(path).replaceAll(regex, replacement);

0 commit comments

Comments
 (0)