forked from java9-modularity/gradle-modules-plugin
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathModularCreateStartScripts.java
More file actions
85 lines (69 loc) · 2.85 KB
/
ModularCreateStartScripts.java
File metadata and controls
85 lines (69 loc) · 2.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package org.javamodularity.moduleplugin.tasks;
import org.gradle.api.GradleException;
import org.gradle.api.Project;
import org.gradle.api.plugins.ApplicationPluginConvention;
import org.gradle.api.plugins.JavaApplication;
import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.Internal;
import org.gradle.api.tasks.application.CreateStartScripts;
import javax.annotation.Nullable;
import java.io.File;
import java.util.ArrayList;
public class ModularCreateStartScripts extends CreateStartScripts {
public static final String UNDEFINED_MAIN_CLASS_NAME = "<undefined>";
private String changedMain;
@Internal
private ModularJavaExec runTask;
public ModularCreateStartScripts() {
setClasspath(getProject().files());
}
@Input
@Nullable
public String getMainClassName() {
String main = changedMain;
if(main == null) {
main = super.getMainClass().getOrNull();
}
if(main == null) {
main = UNDEFINED_MAIN_CLASS_NAME;
}
return main;
}
public void setMainClassName(@Nullable String mainClassName) {
changedMain = mainClassName;
getMainClass().set(mainClassName);
}
public ModularJavaExec getRunTask() {
return runTask;
}
public void setRunTask(ModularJavaExec runTask) {
this.runTask = runTask;
}
//region CONFIGURE
public static void configure(Project project) {
project.afterEvaluate(ModularCreateStartScripts::configureAfterEvaluate);
}
private static void configureAfterEvaluate(Project project) {
project.getTasks().withType(ModularCreateStartScripts.class)
.forEach(startScriptsTask -> configure(startScriptsTask, project));
}
private static void configure(ModularCreateStartScripts startScriptsTask, Project project) {
final var appExtension = project.getExtensions().findByType(JavaApplication.class);
if (appExtension != null) {
var distDir = project.file(project.getLayout().getBuildDirectory().get().getAsFile() + "/install/" + appExtension.getApplicationName());
startScriptsTask.setOutputDir(new File(distDir, appExtension.getExecutableDir()));
}
ModularJavaExec runTask = startScriptsTask.getRunTask();
if (runTask == null) throw new GradleException("runTask not set for task " + startScriptsTask.getName());
var runJvmArgs = runTask.getOwnJvmArgs();
if (!runJvmArgs.isEmpty()) {
var defaultJvmOpts = new ArrayList<>(runJvmArgs);
startScriptsTask.getDefaultJvmOpts().forEach(defaultJvmOpts::add);
startScriptsTask.setDefaultJvmOpts(defaultJvmOpts);
}
var mutator = new StartScriptsMutator(runTask, project);
mutator.updateStartScriptsTask(startScriptsTask);
mutator.movePatchedLibs();
}
//endregion
}