diff options
Diffstat (limited to 'src/main')
4 files changed, 56 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..2f619a5 --- /dev/null +++ b/src/main/java/ch/fhnw/thga/gradleplugins/RunFregeTask.java @@ -0,0 +1,41 @@ +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; + +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 + 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(); + } +} |