diff options
author | tricktron <tgagnaux@gmail.com> | 2021-11-10 09:36:14 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-10 09:36:14 +0100 |
commit | 5df7fd223a84c2c4db55668da2b5c0f460a19774 (patch) | |
tree | 52ad47aa09a66506f9f99d5aefbfdef969cf9086 /src/main/java | |
parent | 2b2b16037a7a2083a6929c20fbf8ac25763f8ec7 (diff) | |
parent | f3924e8748efe3b035a43ec62eb1ab54179c6221 (diff) | |
download | frege-gradle-plugin-5df7fd223a84c2c4db55668da2b5c0f460a19774.tar.gz frege-gradle-plugin-5df7fd223a84c2c4db55668da2b5c0f460a19774.tar.bz2 frege-gradle-plugin-5df7fd223a84c2c4db55668da2b5c0f460a19774.zip |
Merge pull request #1 from tricktron/f-runTask
RunFrege Task
Diffstat (limited to 'src/main/java')
4 files changed, 58 insertions, 5 deletions
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java index 551f6c5..6ba6212 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java @@ -29,7 +29,6 @@ public abstract class CompileFregeTask extends DefaultTask { @Inject public CompileFregeTask(ObjectFactory objectFactory) { javaExec = objectFactory.newInstance(JavaExec.class); - } @TaskAction diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java index fd4f1b4..139429b 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java @@ -8,11 +8,14 @@ import org.gradle.api.provider.Property; public abstract class FregeExtension { public static final String DEFAULT_DOWNLOAD_DIRECTORY = "lib"; + public static final String DEFAULT_RELATIVE_OUTPUT_DIR = "classes/main/frege"; public abstract Property<String> getVersion(); public abstract Property<String> getRelease(); + public abstract Property<String> getMainModule(); + public abstract DirectoryProperty getCompilerDownloadDir(); public abstract DirectoryProperty getMainSourceDir(); @@ -23,7 +26,7 @@ public abstract class FregeExtension { public FregeExtension(ProjectLayout projectLayout) { getCompilerDownloadDir().convention(projectLayout.getProjectDirectory().dir(DEFAULT_DOWNLOAD_DIRECTORY)); getMainSourceDir().convention(projectLayout.getProjectDirectory()); - getOutputDir().convention(projectLayout.getBuildDirectory().dir("classes/main/frege")); + getOutputDir().convention(projectLayout.getBuildDirectory().dir(DEFAULT_RELATIVE_OUTPUT_DIR)); } } diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java index 4f0bb34..8c50a5f 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java @@ -7,6 +7,7 @@ import org.gradle.api.tasks.TaskProvider; public class FregePlugin implements Plugin<Project> { public static final String SETUP_FREGE_TASK_NAME = "setupFrege"; public static final String COMPILE_FREGE_TASK_NAME = "compileFrege"; + public static final String RUN_FREGE_TASK_NAME = "runFrege"; public static final String FREGE_PLUGIN_ID = "ch.fhnw.thga.frege"; public static final String FREGE_EXTENSION_NAME = "frege"; @@ -20,11 +21,18 @@ public class FregePlugin implements Plugin<Project> { task.getDownloadDir().set(extension.getCompilerDownloadDir()); }); - project.getTasks().register(COMPILE_FREGE_TASK_NAME, CompileFregeTask.class, task -> { - task.dependsOn(setupFregeCompilerTask); + TaskProvider<CompileFregeTask> compileFregeTask = project.getTasks().register(COMPILE_FREGE_TASK_NAME, + CompileFregeTask.class, task -> { + task.dependsOn(setupFregeCompilerTask); + task.getFregeCompilerJar().set(setupFregeCompilerTask.get().getFregeCompilerOutputPath()); + task.getFregeMainSourceDir().set(extension.getMainSourceDir()); + task.getFregeOutputDir().set(extension.getOutputDir()); + }); + project.getTasks().register(RUN_FREGE_TASK_NAME, RunFregeTask.class, task -> { + task.dependsOn(compileFregeTask); task.getFregeCompilerJar().set(setupFregeCompilerTask.get().getFregeCompilerOutputPath()); - task.getFregeMainSourceDir().set(extension.getMainSourceDir()); task.getFregeOutputDir().set(extension.getOutputDir()); + task.getMainModule().set(extension.getMainModule()); }); } } diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/RunFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/RunFregeTask.java new file mode 100644 index 0000000..d27816c --- /dev/null +++ b/src/main/java/ch/fhnw/thga/gradleplugins/RunFregeTask.java @@ -0,0 +1,43 @@ +package ch.fhnw.thga.gradleplugins; + +import javax.inject.Inject; + +import org.gradle.api.DefaultTask; +import org.gradle.api.file.DirectoryProperty; +import org.gradle.api.file.RegularFileProperty; +import org.gradle.api.logging.Logger; +import org.gradle.api.logging.Logging; +import org.gradle.api.model.ObjectFactory; +import org.gradle.api.provider.Property; +import org.gradle.api.tasks.Input; +import org.gradle.api.tasks.InputDirectory; +import org.gradle.api.tasks.InputFile; +import org.gradle.api.tasks.JavaExec; +import org.gradle.api.tasks.TaskAction; +import org.gradle.api.tasks.options.Option; + +public abstract class RunFregeTask extends DefaultTask { + public static final Logger LOGGER = Logging.getLogger(SetupFregeTask.class); + private final JavaExec javaExec; + + @InputFile + public abstract RegularFileProperty getFregeCompilerJar(); + + @InputDirectory + public abstract DirectoryProperty getFregeOutputDir(); + + @Input + @Option(option = "mainModule", description = "The full name of the Frege module with a main function, e.g. 'my.mod.Name'") + public abstract Property<String> getMainModule(); + + @Inject + public RunFregeTask(ObjectFactory objectFactory) { + javaExec = objectFactory.newInstance(JavaExec.class); + } + + @TaskAction + public void runFrege() { + javaExec.getMainClass().set(getMainModule()); + javaExec.setClasspath(getProject().files(getFregeCompilerJar(), getFregeOutputDir())).exec(); + } +} |