All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.corda.gradle.flask.FlaskPlugin.groovy Maven / Gradle / Ivy

The newest version!
package net.corda.gradle.flask

import net.corda.flask.common.Flask
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.file.Directory
import org.gradle.api.plugins.JavaPlugin
import org.gradle.api.plugins.JavaPluginConvention
import org.gradle.api.provider.Provider
import org.gradle.api.tasks.Copy
import org.gradle.api.tasks.JavaExec
import org.gradle.api.tasks.SourceSet
import org.gradle.jvm.tasks.Jar

class FlaskPlugin implements Plugin {

    @Override
    void apply(Project project) {
        project.getPluginManager().apply(JavaPlugin.class)
        project.ext['FlaskJarTask'] = FlaskJarTask.class
        Provider flaskDir = project.layout.buildDirectory.dir("classes/flask-launcher")
        Provider extractLauncherTarProvider = project.tasks.register("extractLauncherTar", Copy) {
            group = Flask.Constants.GRADLE_TASK_GROUP
            description = "Extract the Flask Launcher classes to be used to build a custom launcher"
            into(flaskDir)
            from(project.tarTree(LauncherResource.instance))
        }

        JavaPluginConvention javaPluginConvention = project.convention.getPlugin(JavaPluginConvention.class)
        SourceSet flaskSourceSet = javaPluginConvention.sourceSets.create("flask")
        flaskSourceSet.compiledBy(extractLauncherTarProvider)
        project.configurations.getByName(flaskSourceSet.compileOnlyConfigurationName).withDependencies { dependencies ->
            def launcherDependency = project.dependencies.create(extractLauncherTarProvider.get().outputs.files)
            dependencies.add(launcherDependency)
        }

        Provider flaskJarTask = project.tasks.register("flaskJar", FlaskJarTask.class) {
            description = "Package the current project code in an executable jar file"
            archiveBaseName = "${project.name}-flask"
            inputs.files(flaskSourceSet.output)
            from {
                flaskSourceSet.runtimeClasspath.collect {
                    if(it.exists()) {
                        it.isDirectory() ? it : project.zipTree(it)
                    } else {
                        null
                    }
                }
            }
            includeLibraries(project.tasks.named(JavaPlugin.JAR_TASK_NAME, Jar).map {it.outputs })
            includeLibraries(project.configurations.named(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME))
        }
        project.tasks.register('flaskRun', JavaExec) {
            group = Flask.Constants.GRADLE_TASK_GROUP
            description = "Run the jar file created by the 'flaskJar' task"
            inputs.files(flaskJarTask)
            classpath(flaskJarTask)
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy