Browse Source

ISSUE-169: fix gradle demo (#177)

pull/178/head
Cesar Andres 7 years ago committed by Decebal Suiu
parent
commit
468abf3490
  1. 62
      demo_gradle/README.md
  2. 5
      demo_gradle/api/build.gradle
  3. 27
      demo_gradle/app/build.gradle
  4. 14
      demo_gradle/app/src/main/java/org/pf4j/demo/Boot.java
  5. 20
      demo_gradle/build.gradle
  6. 2
      demo_gradle/gradle.properties
  7. 32
      demo_gradle/plugins/build.gradle
  8. 30
      demo_gradle/plugins/plugin1/build.gradle
  9. 6
      demo_gradle/plugins/plugin1/gradle.properties
  10. 5
      demo_gradle/plugins/plugin1/plugin.properties
  11. 30
      demo_gradle/plugins/plugin2/build.gradle
  12. 6
      demo_gradle/plugins/plugin2/gradle.properties
  13. 5
      demo_gradle/plugins/plugin2/plugin.properties
  14. 31
      demo_gradle/plugins/plugin3/build.gradle
  15. 6
      demo_gradle/plugins/plugin3/gradle.properties
  16. 9
      demo_gradle/settings.gradle

62
demo_gradle/README.md

@ -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()
```

5
demo_gradle/api/build.gradle

@ -1,5 +1,6 @@
dependencies { dependencies {
compile 'org.pf4j:pf4j:2.0.0-SNAPSHOT' compile group: 'org.pf4j', name: 'pf4j', version: "${pf4jVersion}"
compile 'org.apache.commons:commons-lang3:3.0' compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.5'
testCompile group: 'junit', name: 'junit', version: '4.+' testCompile group: 'junit', name: 'junit', version: '4.+'
} }

27
demo_gradle/app/build.gradle

@ -4,13 +4,28 @@ mainClassName = 'org.pf4j.demo.Boot'
dependencies { dependencies {
compile project(':api') compile project(':api')
compile 'org.pf4j:pf4j:2.0.0-SNAPSHOT' compile group: 'org.pf4j', name: 'pf4j', version: "${pf4jVersion}"
compile 'org.apache.commons:commons-lang3:3.5' compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.5'
testCompile group: 'junit', name: 'junit', version: '4.+'
compile group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25' compile group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25'
testCompile group: 'junit', name: 'junit', version: '4.+'
} }
jar { task uberjar(type: Jar, dependsOn: ['compileJava']) {
baseName = 'Plugin Demo' zip64 true
version = '0.1.0' 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"
} }

14
demo_gradle/app/src/main/java/org/pf4j/demo/Boot.java

@ -16,6 +16,9 @@
package org.pf4j.demo; package org.pf4j.demo;
import org.apache.commons.lang3.StringUtils; 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.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.pf4j.DefaultPluginManager; import org.pf4j.DefaultPluginManager;
@ -38,7 +41,16 @@ public class Boot {
printLogo(); printLogo();
// create the plugin manager // 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 // load the plugins
pluginManager.loadPlugins(); pluginManager.loadPlugins();

20
demo_gradle/build.gradle

@ -6,21 +6,9 @@ subprojects {
mavenCentral() 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'
}
}
}
}
}

2
demo_gradle/gradle.properties

@ -0,0 +1,2 @@
# PF4J
pf4jVersion=2.0.0

32
demo_gradle/plugins/build.gradle

@ -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

30
demo_gradle/plugins/plugin1/build.gradle

@ -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 { 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! // 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') { compileOnly project(':api')
compileOnly(group: 'org.pf4j', name: 'pf4j', version: "${pf4jVersion}") {
exclude group: "org.slf4j" exclude group: "org.slf4j"
} }
compile 'org.apache.commons:commons-lang3:3.5' compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.5'
testCompile group: 'junit', name: 'junit', version: '4.+' testCompile group: 'junit', name: 'junit', version: '4.+'
} }

6
demo_gradle/plugins/plugin1/gradle.properties

@ -0,0 +1,6 @@
version=0.0.1
pluginId=welcome-plugin
pluginClass=org.pf4j.demo.welcome.WelcomePlugin
pluginProvider=Decebal Suiu
pluginDependencies=

5
demo_gradle/plugins/plugin1/plugin.properties

@ -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=

30
demo_gradle/plugins/plugin2/build.gradle

@ -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 { 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! // 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') { compileOnly project(':api')
compileOnly(group: 'org.pf4j', name: 'pf4j', version: "${pf4jVersion}") {
exclude group: "org.slf4j" exclude group: "org.slf4j"
} }
compile 'org.apache.commons:commons-lang3:3.5' compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.5'
testCompile group: 'junit', name: 'junit', version: '4.+' testCompile group: 'junit', name: 'junit', version: '4.+'
} }

6
demo_gradle/plugins/plugin2/gradle.properties

@ -0,0 +1,6 @@
version=0.0.1
pluginId=hello-plugin
pluginClass=org.pf4j.demo.hello.HelloPlugin
pluginProvider=Decebal Suiu
pluginDependencies=

5
demo_gradle/plugins/plugin2/plugin.properties

@ -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=

31
demo_gradle/plugins/plugin3/build.gradle

@ -9,30 +9,6 @@ buildscript {
} }
} }
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')
}
assemble.dependsOn plugin
apply plugin: 'kotlin' apply plugin: 'kotlin'
apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-kapt'
@ -42,10 +18,11 @@ repositories {
dependencies { dependencies {
compileOnly project(':api') compileOnly project(':api')
kapt('org.pf4j:pf4j:2.0.0-SNAPSHOT') { compileOnly(group: 'org.pf4j', name: 'pf4j', version: "${pf4jVersion}") {
exclude group: "org.slf4j" exclude group: "org.slf4j"
} }
compile 'org.apache.commons:commons-lang3:3.5' compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.5'
testCompile group: 'junit', name: 'junit', version: '4.+'
compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version" compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
testCompile group: 'junit', name: 'junit', version: '4.+'
} }

6
demo_gradle/plugins/plugin3/gradle.properties

@ -0,0 +1,6 @@
version=1.0.0
pluginId=KotlinPlugin
pluginClass=org.pf4j.demo.kotlin.KotlinPlugin
pluginProvider=Anindya Chatterjee
pluginDependencies=

9
demo_gradle/settings.gradle

@ -1,5 +1,8 @@
include 'api' include 'api'
include 'app' include 'app'
include 'plugins/plugin1'
include 'plugins/plugin2' include 'plugins'
include 'plugins/plugin3'
include 'plugins:plugin1'
include 'plugins:plugin2'
include 'plugins:plugin3'

Loading…
Cancel
Save