]> source.dussan.org Git - pf4j.git/commitdiff
ISSUE-169: fix gradle demo (#177)
authorCesar Andres <cesar.vera-bernal@lucidworks.com>
Sat, 21 Oct 2017 20:52:17 +0000 (15:52 -0500)
committerDecebal Suiu <decebal.suiu@gmail.com>
Sat, 21 Oct 2017 20:52:17 +0000 (23:52 +0300)
16 files changed:
demo_gradle/README.md [new file with mode: 0644]
demo_gradle/api/build.gradle
demo_gradle/app/build.gradle
demo_gradle/app/src/main/java/org/pf4j/demo/Boot.java
demo_gradle/build.gradle
demo_gradle/gradle.properties [new file with mode: 0644]
demo_gradle/plugins/build.gradle [new file with mode: 0644]
demo_gradle/plugins/plugin1/build.gradle
demo_gradle/plugins/plugin1/gradle.properties [new file with mode: 0644]
demo_gradle/plugins/plugin1/plugin.properties [deleted file]
demo_gradle/plugins/plugin2/build.gradle
demo_gradle/plugins/plugin2/gradle.properties [new file with mode: 0644]
demo_gradle/plugins/plugin2/plugin.properties [deleted file]
demo_gradle/plugins/plugin3/build.gradle
demo_gradle/plugins/plugin3/gradle.properties [new file with mode: 0644]
demo_gradle/settings.gradle

diff --git a/demo_gradle/README.md b/demo_gradle/README.md
new file mode 100644 (file)
index 0000000..6851fc0
--- /dev/null
@@ -0,0 +1,62 @@
+# PF4J Gradle Demo
+
+This demo assumes that you know the basics of Gradle (Please look at [gradle](https://gradle.org/) for more info)
+
+### Setup/Build
+
+1. Clone the repo
+2. Go to demo_gradle `cd demo_gradle` 
+3. run `gradle build`
+
+* This will produce one jar, named app-plugin-demo-uberjar.jar, located in the `app/build/libs/` directory and three plugins zips located in `build/plugins` directory.
+* The plugins are `plugin-hello-plugin-0.0.1.zip`,  `plugin-KotlinPlugin-1.0.0.zip` and `plugin-welcome-plugin-0.0.1.zip`
+
+### Run the demo
+
+1. Run 
+
+```
+ java -jar -Dpf4j.pluginsDir=build/plugins app/build/libs/app-plugin-demo-uberjar.jar 
+```
+
+* pf4j.pluginsDir: is where the plugins are located
+
+2. The demo's output should look similar to: (Please see `Boot#main()` for more details)
+```
+demo_gradle $ java -jar -Dpf4j.pluginsDir=build/plugins app/build/libs/app-plugin-demo-uberjar.jar 
+[main] INFO org.pf4j.demo.Boot - ########################################
+[main] INFO org.pf4j.demo.Boot -                PF4J-DEMO                
+[main] INFO org.pf4j.demo.Boot - ########################################
+[main] INFO org.pf4j.DefaultPluginStatusProvider - Enabled plugins: []
+[main] INFO org.pf4j.DefaultPluginStatusProvider - Disabled plugins: []
+[main] INFO org.pf4j.DefaultPluginManager - PF4J version 0.0.0 in 'deployment' mode
+[main] INFO org.pf4j.AbstractPluginManager - Plugin 'welcome-plugin@0.0.1' resolved
+[main] INFO org.pf4j.AbstractPluginManager - Plugin 'KotlinPlugin@1.0.0' resolved
+[main] INFO org.pf4j.AbstractPluginManager - Plugin 'hello-plugin@0.0.1' resolved
+[main] INFO org.pf4j.AbstractPluginManager - Start plugin 'welcome-plugin@0.0.1'
+[main] INFO org.pf4j.demo.welcome.WelcomePlugin - WelcomePlugin.start()
+[main] INFO org.pf4j.demo.welcome.WelcomePlugin - WELCOMEPLUGIN
+[main] INFO org.pf4j.AbstractPluginManager - Start plugin 'KotlinPlugin@1.0.0'
+[main] INFO org.pf4j.demo.kotlin.KotlinPlugin - KotlinPlugin.start()
+[main] INFO org.pf4j.demo.kotlin.KotlinPlugin - KOTLINPLUGIN
+[main] INFO org.pf4j.AbstractPluginManager - Start plugin 'hello-plugin@0.0.1'
+[main] INFO org.pf4j.demo.hello.HelloPlugin - HelloPlugin.start()
+[main] INFO org.pf4j.demo.Boot - Plugindirectory: 
+[main] INFO org.pf4j.demo.Boot -       build/plugins
+
+[main] INFO org.pf4j.demo.Boot - Found 3 extensions for extension point 'org.pf4j.demo.api.Greeting'
+[main] INFO org.pf4j.demo.Boot - >>> Whazzup
+[main] INFO org.pf4j.demo.Boot - >>> Welcome
+[main] INFO org.pf4j.demo.Boot - >>> Hello
+[main] INFO org.pf4j.demo.Boot - Extensions added by plugin 'welcome-plugin':
+[main] INFO org.pf4j.demo.Boot - Extensions added by plugin 'KotlinPlugin':
+[main] INFO org.pf4j.demo.Boot - Extensions added by plugin 'hello-plugin':
+[main] INFO org.pf4j.AbstractPluginManager - Stop plugin 'hello-plugin@0.0.1'
+[main] INFO org.pf4j.demo.hello.HelloPlugin - HelloPlugin.stop()
+[main] INFO org.pf4j.AbstractPluginManager - Stop plugin 'KotlinPlugin@1.0.0'
+[main] INFO org.pf4j.demo.kotlin.KotlinPlugin - KotlinPlugin.stop()
+[main] INFO org.pf4j.AbstractPluginManager - Stop plugin 'welcome-plugin@0.0.1'
+[main] INFO org.pf4j.demo.welcome.WelcomePlugin - WelcomePlugin.stop()
+
+```
+
index 12a46bf253f0639b518600687d88c61bcc0e13d7..0d3ca6264582b891312f50f0d3c7da1a4cd1259c 100644 (file)
@@ -1,5 +1,6 @@
 dependencies {
-    compile 'org.pf4j:pf4j:2.0.0-SNAPSHOT'
-    compile 'org.apache.commons:commons-lang3:3.0'
+    compile group: 'org.pf4j', name: 'pf4j', version: "${pf4jVersion}"
+    compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.5'
+
     testCompile group: 'junit', name: 'junit', version: '4.+'
 }
index 9f3d5a434a0b92d1224ce297424849c650edc8fc..4761092edc0699008cdf2afa45261b75b1f44ef2 100644 (file)
@@ -3,14 +3,29 @@ apply plugin: 'application'
 mainClassName = 'org.pf4j.demo.Boot'
 
 dependencies {
-    compile project(':api')
-    compile 'org.pf4j:pf4j:2.0.0-SNAPSHOT'
-    compile 'org.apache.commons:commons-lang3:3.5'
-    testCompile group: 'junit', name: 'junit', version: '4.+'
-    compile group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25'
+  compile project(':api')
+  compile group: 'org.pf4j', name: 'pf4j', version: "${pf4jVersion}"
+  compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.5'
+  compile group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25'
+
+  testCompile group: 'junit', name: 'junit', version: '4.+'
 }
 
-jar {
-    baseName = 'Plugin Demo'
-    version = '0.1.0'
+task uberjar(type: Jar, dependsOn: ['compileJava']) {
+  zip64 true
+  from configurations.runtime.asFileTree.files.collect {
+    exclude "META-INF/*.SF"
+    exclude "META-INF/*.DSA"
+    exclude "META-INF/*.RSA"
+    zipTree(it)
+  }
+  from files(sourceSets.main.output.classesDir)
+  from files(sourceSets.main.resources)
+  manifest {
+    attributes 'Main-Class': mainClassName
+  }
+
+  baseName = "${project.name}-plugin-demo"
+  classifier = "uberjar"
 }
+
index 46261d68def9549dbf3cc49f2ebf5a337a69b7a0..9343f4af8ee8581b4c3ea7bfe5b665d656f491dc 100644 (file)
@@ -16,6 +16,9 @@
 package org.pf4j.demo;
 
 import org.apache.commons.lang3.StringUtils;
+import org.pf4j.CompoundPluginDescriptorFinder;
+import org.pf4j.ManifestPluginDescriptorFinder;
+import org.pf4j.PropertiesPluginDescriptorFinder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.pf4j.DefaultPluginManager;
@@ -38,7 +41,16 @@ public class Boot {
         printLogo();
 
         // create the plugin manager
-        final PluginManager pluginManager = new DefaultPluginManager();
+        final PluginManager pluginManager = new DefaultPluginManager() {
+          @Override
+          protected CompoundPluginDescriptorFinder createPluginDescriptorFinder() {
+            return new CompoundPluginDescriptorFinder()
+                // Demo is using the Manifest file
+                // PropertiesPluginDescriptorFinder is commented out just to avoid error log
+                //.add(new PropertiesPluginDescriptorFinder())
+                .add(new ManifestPluginDescriptorFinder());
+          }
+        };
 
         // load the plugins
         pluginManager.loadPlugins();
index d86746dd5e5e717d4e4704af78b32eb6c50d1715..996836020a288b1129ff31e1e7ceafeaa6bf9402 100644 (file)
@@ -1,26 +1,14 @@
 subprojects {
-    apply plugin: 'java'
+  apply plugin: 'java'
 
-    repositories {
-        mavenLocal()
-        mavenCentral()
-    }
+  repositories {
+    mavenLocal()
+    mavenCentral()
+  }
 }
+// plugin location
+ext.pluginsDir = rootProject.buildDir.path + '/plugins'
+
+task build(dependsOn: [':app:uberjar'])
 
-task copyPlugins() {
-    doLast {
-        delete 'app/plugins'
-        mkdir 'app/plugins'
 
-        subprojects.each { p ->
-            if (p.path.contains(":plugins/")) {
-                System.out.println("Copying plugin from " + p.path);
-                copy {
-                    from p.projectDir.toString() + '/build/libs'
-                    into 'app/plugins'
-                    include '*.zip'
-                }
-            }
-        }
-    }
-}
diff --git a/demo_gradle/gradle.properties b/demo_gradle/gradle.properties
new file mode 100644 (file)
index 0000000..177f36b
--- /dev/null
@@ -0,0 +1,2 @@
+# PF4J
+pf4jVersion=2.0.0
diff --git a/demo_gradle/plugins/build.gradle b/demo_gradle/plugins/build.gradle
new file mode 100644 (file)
index 0000000..104b17d
--- /dev/null
@@ -0,0 +1,32 @@
+subprojects {
+  jar {
+    manifest {
+      attributes 'Plugin-Class': "${pluginClass}",
+          'Plugin-Id': "${pluginId}",
+          'Plugin-Version': "${version}",
+          'Plugin-Provider': "${pluginProvider}"
+    }
+  }
+
+  task plugin(type: Jar) {
+    baseName = "plugin-${pluginId}"
+    into('classes') {
+      with jar
+    }
+    into('lib') {
+      from configurations.compile
+    }
+    extension('zip')
+  }
+
+  task assemblePlugin(type: Copy) {
+    from plugin
+    into pluginsDir
+  }
+}
+
+task assemblePlugins(type: Copy) {
+  dependsOn subprojects.assemblePlugin
+}
+
+build.dependsOn project.tasks.assemblePlugins
index 6a9d5074a32b8e380c8982cc61ad21dd19106bb9..69791a7e3205d34358710464d02d2c5093ba7673 100644 (file)
@@ -1,33 +1,9 @@
-jar {
-    baseName = 'WelcomePlugin'
-    version = '0.1.0'
-    manifest {
-        attributes 'Plugin-Class': 'org.pf4j.demo.welcome.WelcomePlugin',
-            'Plugin-Id': 'WelcomePlugin',
-            'Plugin-Version': '1.0.0',
-            'Plugin-Provider': 'Decebal Suiu'
-    }
-}
-
-task plugin(type: Jar) {
-    baseName = 'WelcomePlugin'
-    version = '0.1.0'
-    into('classes') {
-        with jar
-    }
-    into('lib') {
-        from configurations.compile
-    }
-    extension('zip')
-}
-assemble.dependsOn plugin
-
 dependencies {
-    compileOnly project(':api')
-    // compileOnly important!!! We do not want to put the api into the zip file since the main program has it already!
-    compile('org.pf4j:pf4j:2.0.0-SNAPSHOT') {
-        exclude group: "org.slf4j"
-    }
-    compile 'org.apache.commons:commons-lang3:3.5'
-    testCompile group: 'junit', name: 'junit', version: '4.+'
+  // compileOnly important!!! We do not want to put the api into the zip file since the main program has it already!
+  compileOnly project(':api')
+  compileOnly(group: 'org.pf4j', name: 'pf4j', version: "${pf4jVersion}") {
+    exclude group: "org.slf4j"
+  }
+  compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.5'
+  testCompile group: 'junit', name: 'junit', version: '4.+'
 }
diff --git a/demo_gradle/plugins/plugin1/gradle.properties b/demo_gradle/plugins/plugin1/gradle.properties
new file mode 100644 (file)
index 0000000..2edd800
--- /dev/null
@@ -0,0 +1,6 @@
+version=0.0.1
+
+pluginId=welcome-plugin
+pluginClass=org.pf4j.demo.welcome.WelcomePlugin
+pluginProvider=Decebal Suiu
+pluginDependencies=
diff --git a/demo_gradle/plugins/plugin1/plugin.properties b/demo_gradle/plugins/plugin1/plugin.properties
deleted file mode 100644 (file)
index 9da9bcc..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-plugin.id=welcome-plugin
-plugin.class=org.pf4j.demo.welcome.WelcomePlugin
-plugin.version=0.0.1
-plugin.provider=Decebal Suiu
-plugin.dependencies=
index da75a55f1b4f61da60d041802175186262087789..69791a7e3205d34358710464d02d2c5093ba7673 100644 (file)
@@ -1,33 +1,9 @@
-jar {
-    baseName = 'HelloPlugin'
-    version = '0.1.0'
-    manifest {
-        attributes 'Plugin-Class': 'org.pf4j.demo.hello.HelloPlugin',
-            'Plugin-Id': 'HelloPlugin',
-            'Plugin-Version': '1.0.0',
-            'Plugin-Provider': 'Decebal Suiu'
-    }
-}
-
-task plugin(type: Jar) {
-    baseName = 'HelloPlugin'
-    version = '0.1.0'
-    into('classes') {
-        with jar
-    }
-    into('lib') {
-        from configurations.compile
-    }
-    extension('zip')
-}
-assemble.dependsOn plugin
-
 dependencies {
-    compileOnly project(':api')
-    // compileOnly important!!! We do not want to put the api into the zip file since the main program has it already!
-    compile('org.pf4j:pf4j:2.0.0-SNAPSHOT') {
-        exclude group: "org.slf4j"
-    }
-    compile 'org.apache.commons:commons-lang3:3.5'
-    testCompile group: 'junit', name: 'junit', version: '4.+'
+  // compileOnly important!!! We do not want to put the api into the zip file since the main program has it already!
+  compileOnly project(':api')
+  compileOnly(group: 'org.pf4j', name: 'pf4j', version: "${pf4jVersion}") {
+    exclude group: "org.slf4j"
+  }
+  compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.5'
+  testCompile group: 'junit', name: 'junit', version: '4.+'
 }
diff --git a/demo_gradle/plugins/plugin2/gradle.properties b/demo_gradle/plugins/plugin2/gradle.properties
new file mode 100644 (file)
index 0000000..ef70127
--- /dev/null
@@ -0,0 +1,6 @@
+version=0.0.1
+
+pluginId=hello-plugin
+pluginClass=org.pf4j.demo.hello.HelloPlugin
+pluginProvider=Decebal Suiu
+pluginDependencies=
diff --git a/demo_gradle/plugins/plugin2/plugin.properties b/demo_gradle/plugins/plugin2/plugin.properties
deleted file mode 100644 (file)
index 60b6f33..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-plugin.id=hello-plugin
-plugin.class=org.pf4j.demo.hello.HelloPlugin
-plugin.version=0.0.1
-plugin.provider=Decebal Suiu
-plugin.dependencies=
index 69afeab20e8de329ab24af398ef9dcae96931ebd..c360e23310a0e9c3214e9214c13f0f114dc3f6a9 100644 (file)
@@ -1,51 +1,28 @@
 buildscript {
-    ext.kotlin_version = '1.1.2-2'
+  ext.kotlin_version = '1.1.2-2'
 
-    repositories {
-        mavenCentral()
-    }
-    dependencies {
-        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
-    }
-}
-
-jar {
-    baseName = 'KotlinPlugin'
-    version = '0.1.0'
-    manifest {
-        attributes 'Plugin-Class': 'org.pf4j.demo.kotlin.KotlinPlugin',
-            'Plugin-Id': 'KotlinPlugin',
-            'Plugin-Version': '1.0.0',
-            'Plugin-Provider': 'Anindya Chatterjee'
-    }
-}
-
-task plugin(type: Jar) {
-    baseName = 'KotlinPlugin'
-    version = '0.1.0'
-    into('classes') {
-        with jar
-    }
-    into('lib') {
-        from configurations.compile
-    }
-    extension('zip')
+  repositories {
+    mavenCentral()
+  }
+  dependencies {
+    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
+  }
 }
-assemble.dependsOn plugin
 
 apply plugin: 'kotlin'
 apply plugin: 'kotlin-kapt'
 
 repositories {
-    mavenCentral()
+  mavenCentral()
 }
 
 dependencies {
-    compileOnly project(':api')
-    kapt('org.pf4j:pf4j:2.0.0-SNAPSHOT') {
-        exclude group: "org.slf4j"
-    }
-    compile 'org.apache.commons:commons-lang3:3.5'
-    testCompile group: 'junit', name: 'junit', version: '4.+'
-    compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
+  compileOnly project(':api')
+  compileOnly(group: 'org.pf4j', name: 'pf4j', version: "${pf4jVersion}") {
+    exclude group: "org.slf4j"
+  }
+  compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.5'
+  compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
+
+  testCompile group: 'junit', name: 'junit', version: '4.+'
 }
diff --git a/demo_gradle/plugins/plugin3/gradle.properties b/demo_gradle/plugins/plugin3/gradle.properties
new file mode 100644 (file)
index 0000000..a04b609
--- /dev/null
@@ -0,0 +1,6 @@
+version=1.0.0
+
+pluginId=KotlinPlugin
+pluginClass=org.pf4j.demo.kotlin.KotlinPlugin
+pluginProvider=Anindya Chatterjee
+pluginDependencies=
index 7ee71bac5d52f391e49fa3482560ab56b049e1d5..828e80a294450a8bd3f257bac81005fc0ff37b13 100644 (file)
@@ -1,5 +1,8 @@
 include 'api'
 include 'app'
-include 'plugins/plugin1'
-include 'plugins/plugin2'
-include 'plugins/plugin3'
+
+include 'plugins'
+
+include 'plugins:plugin1'
+include 'plugins:plugin2'
+include 'plugins:plugin3'