From 8ca966b3768605706d76d9df3f610e809a494f1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Mon, 9 Mar 2020 21:12:15 +0100 Subject: [PATCH] Create working example of external module --- api/build.gradle | 3 + .../kotlin/io/smnp/ext/ModuleDefinition.kt | 11 ++++ build.gradle | 1 - modules/build.gradle | 25 -------- modules/lang/build.gradle | 61 +++++++++++++++++++ modules/lang/gradle.properties | 7 +++ .../io/smnp/ext/lang/DisplayFunction.kt | 16 +++++ .../kotlin/io/smnp/ext/lang/LangModule.kt | 14 +++++ settings.gradle | 4 +- 9 files changed, 113 insertions(+), 29 deletions(-) create mode 100644 api/src/main/kotlin/io/smnp/ext/ModuleDefinition.kt create mode 100644 modules/lang/build.gradle create mode 100644 modules/lang/gradle.properties create mode 100644 modules/lang/src/main/kotlin/io/smnp/ext/lang/DisplayFunction.kt create mode 100644 modules/lang/src/main/kotlin/io/smnp/ext/lang/LangModule.kt diff --git a/api/build.gradle b/api/build.gradle index 8a966c2..2c078e3 100644 --- a/api/build.gradle +++ b/api/build.gradle @@ -15,6 +15,9 @@ repositories { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" testCompile group: 'junit', name: 'junit', version: '4.12' + compileOnly(group: 'org.pf4j', name: 'pf4j', version: "3.2.0") { + exclude group: "org.slf4j" + } } compileKotlin { diff --git a/api/src/main/kotlin/io/smnp/ext/ModuleDefinition.kt b/api/src/main/kotlin/io/smnp/ext/ModuleDefinition.kt new file mode 100644 index 0000000..c1073e7 --- /dev/null +++ b/api/src/main/kotlin/io/smnp/ext/ModuleDefinition.kt @@ -0,0 +1,11 @@ +package io.smnp.ext + +import io.smnp.callable.function.Function +import io.smnp.callable.method.Method +import org.pf4j.ExtensionPoint + +interface ModuleDefinition : ExtensionPoint { + fun modulePath(): String + fun functions(): List + fun methods(): List +} \ No newline at end of file diff --git a/build.gradle b/build.gradle index 4f276f5..9a1fc8d 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,6 @@ subprojects { } } -// plugin location ext.pluginsDir = rootProject.buildDir.path + '/modules' group 'io.bartek' diff --git a/modules/build.gradle b/modules/build.gradle index 8a966c2..e69de29 100644 --- a/modules/build.gradle +++ b/modules/build.gradle @@ -1,25 +0,0 @@ -plugins { - id 'java' - id 'org.jetbrains.kotlin.jvm' -} - -group 'io.bartek' -version '1.0-SNAPSHOT' - -sourceCompatibility = 1.8 - -repositories { - mavenCentral() -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" - testCompile group: 'junit', name: 'junit', version: '4.12' -} - -compileKotlin { - kotlinOptions.jvmTarget = "1.8" -} -compileTestKotlin { - kotlinOptions.jvmTarget = "1.8" -} \ No newline at end of file diff --git a/modules/lang/build.gradle b/modules/lang/build.gradle new file mode 100644 index 0000000..5423fbb --- /dev/null +++ b/modules/lang/build.gradle @@ -0,0 +1,61 @@ +buildscript { + repositories { + mavenCentral() + } + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.61" + } +} + +plugins { + id 'java' + id 'org.jetbrains.kotlin.jvm' + id 'kotlin-kapt' +} + +group 'io.bartek' +version '1.0-SNAPSHOT' + +sourceCompatibility = 1.8 + +repositories { + mavenCentral() +} + +jar { + manifest { + attributes 'Plugin-Id': "${pluginId}", + 'Plugin-Class': "${pluginClass}", + 'Plugin-Version': "${pluginVersion}", + 'Plugin-Provider': "${pluginProvider}", + 'Plugin-Dependencies': "${pluginDependencies}" + } +} + +task plugin(type: Jar) { + archiveBaseName = "plugin-${pluginId}" + into('classes') { + with jar + } + into('lib') { + from configurations.compile + } + archiveExtension = 'zip' +} + +task assemblePlugin(type: Copy) { + from plugin + into pluginsDir +} + +dependencies { + // compileOnly important!!! We do not want to put the api into the zip file since the main program has it already! + compileOnly project(':api') + compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8" + kapt(group: 'org.pf4j', name: 'pf4j', version: "3.2.0") + compileOnly(group: 'org.pf4j', name: 'pf4j', version: "3.2.0") { + exclude group: "org.slf4j" + } + compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.5' + testCompile group: 'junit', name: 'junit', version: '4.+' +} \ No newline at end of file diff --git a/modules/lang/gradle.properties b/modules/lang/gradle.properties new file mode 100644 index 0000000..0a6019b --- /dev/null +++ b/modules/lang/gradle.properties @@ -0,0 +1,7 @@ +version=0.0.1 + +pluginVersion=0.1 +pluginId=smnp.lang +pluginClass= +pluginProvider=Bartłomiej Pluta +pluginDependencies= \ No newline at end of file diff --git a/modules/lang/src/main/kotlin/io/smnp/ext/lang/DisplayFunction.kt b/modules/lang/src/main/kotlin/io/smnp/ext/lang/DisplayFunction.kt new file mode 100644 index 0000000..fd7d0e9 --- /dev/null +++ b/modules/lang/src/main/kotlin/io/smnp/ext/lang/DisplayFunction.kt @@ -0,0 +1,16 @@ +package io.smnp.ext.lang + +import io.smnp.callable.function.Function +import io.smnp.callable.function.FunctionDefinitionTool +import io.smnp.callable.signature.Signature.Companion.vararg +import io.smnp.type.matcher.Matcher.Companion.allTypes +import io.smnp.type.model.Value + +class DisplayFunction : Function("println") { + override fun define(new: FunctionDefinitionTool) { + new function vararg(allTypes()) define { _, v -> + println(v.joinToString("") { it.toString() }) + Value.void() + } + } +} \ No newline at end of file diff --git a/modules/lang/src/main/kotlin/io/smnp/ext/lang/LangModule.kt b/modules/lang/src/main/kotlin/io/smnp/ext/lang/LangModule.kt new file mode 100644 index 0000000..9885232 --- /dev/null +++ b/modules/lang/src/main/kotlin/io/smnp/ext/lang/LangModule.kt @@ -0,0 +1,14 @@ +package io.smnp.ext.lang + +import io.smnp.callable.method.Method +import io.smnp.ext.ModuleDefinition +import org.pf4j.Extension + +@Extension +class LangModule : ModuleDefinition { + override fun modulePath() = "smnp.io" + + override fun functions() = listOf(DisplayFunction()) + + override fun methods() = emptyList() +} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index ea9fa3f..6d92901 100644 --- a/settings.gradle +++ b/settings.gradle @@ -3,6 +3,4 @@ include 'api' include 'app' include 'modules' -//include 'modules:A' -//include 'modules:B' -//include 'modules:C' +include 'modules:lang'