diff options
Diffstat (limited to 'src/main/java/ch/fhnw/thga')
-rw-r--r-- | src/main/java/ch/fhnw/thga/gradleplugins/FregeInitTask.java | 54 | ||||
-rw-r--r-- | src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java | 20 |
2 files changed, 74 insertions, 0 deletions
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregeInitTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregeInitTask.java new file mode 100644 index 0000000..e96bfb1 --- /dev/null +++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregeInitTask.java @@ -0,0 +1,54 @@ +package ch.fhnw.thga.gradleplugins; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.nio.channels.Channels; +import java.nio.channels.FileChannel; +import java.nio.channels.ReadableByteChannel; + +import org.apache.log4j.Logger; +import org.gradle.api.DefaultTask; +import org.gradle.api.file.ProjectLayout; +import org.gradle.api.file.RegularFile; +import org.gradle.api.file.RegularFileProperty; +import org.gradle.api.provider.Property; +import org.gradle.api.tasks.Input; +import org.gradle.api.tasks.OutputFile; +import org.gradle.api.tasks.TaskAction; + +public abstract class FregeInitTask extends DefaultTask { + private final static Logger LOGGER = Logger.getLogger(FregeInitTask.class.getName()); + private static final String DEFAULT_FREGE_VERSION = "3.25.84"; + private static final String DEFAULT_FREGE_RELEASE = "3.25alpha"; + + @Input + public abstract Property<String> getFregeVersion(); + + @Input + public abstract Property<String> getFregeRelease(); + + @OutputFile + public abstract RegularFileProperty getFregeCompilerJar(); + + public FregeInitTask() { + getFregeVersion().convention(DEFAULT_FREGE_VERSION); + getFregeRelease().convention(DEFAULT_FREGE_RELEASE); + getFregeCompilerJar().convention(getProject().getLayout().getBuildDirectory().file("lib/frege" + getFregeVersion() + ".jar")); + } + + @TaskAction + public void downloadFregeCompiler() { + try { + ReadableByteChannel readChannel = Channels.newChannel( + new URL("https://github.com/Frege/frege/releases/download/" + + getFregeRelease().get() + "/frege" + getFregeVersion() + ".jar").openStream()); + FileOutputStream fregeCompilerDestinationPath = new FileOutputStream(getFregeCompilerJar().get().getAsFile().getAbsolutePath()); + FileChannel writeChannel = fregeCompilerDestinationPath.getChannel(); + writeChannel.transferFrom(readChannel, 0, Long.MAX_VALUE); + } catch (Exception e) { + LOGGER.error(e.getMessage(), e.getCause()); + } + } +} diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java new file mode 100644 index 0000000..678a10c --- /dev/null +++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java @@ -0,0 +1,20 @@ +package ch.fhnw.thga.gradleplugins; + +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.gradle.api.artifacts.Configuration; + +public class FregePlugin implements Plugin<Project> { + + @Override + public void apply(Project project) { + project.getTasks().create("fregeInit", FregeInitTask.class); + Configuration fregeCompiler = project.getConfigurations().create("fregeCompiler", c -> { + c.setVisible(false); + c.setCanBeConsumed(false); + c.setCanBeResolved(true); + c.setDescription("The frege compiler"); + c.defaultDependencies(d -> d.add(project.getDependencies().create("frege3.25.84.jar"))); + }); + } +} |