Browse Source

ISSUE-169: fix gradle demo (#177)

tags/release-2.1.0
Cesar Andres 6 years ago
parent
commit
468abf3490

+ 62
- 0
demo_gradle/README.md View File

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

```


+ 3
- 2
demo_gradle/api/build.gradle View 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.+'
}

+ 23
- 8
demo_gradle/app/build.gradle View 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"
}


+ 13
- 1
demo_gradle/app/src/main/java/org/pf4j/demo/Boot.java View 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();

+ 9
- 21
demo_gradle/build.gradle View 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'
}
}
}
}
}

+ 2
- 0
demo_gradle/gradle.properties View File

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

+ 32
- 0
demo_gradle/plugins/build.gradle View File

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

+ 7
- 31
demo_gradle/plugins/plugin1/build.gradle View 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.+'
}

+ 6
- 0
demo_gradle/plugins/plugin1/gradle.properties View File

@@ -0,0 +1,6 @@
version=0.0.1

pluginId=welcome-plugin
pluginClass=org.pf4j.demo.welcome.WelcomePlugin
pluginProvider=Decebal Suiu
pluginDependencies=

+ 0
- 5
demo_gradle/plugins/plugin1/plugin.properties View File

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

+ 7
- 31
demo_gradle/plugins/plugin2/build.gradle View 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.+'
}

+ 6
- 0
demo_gradle/plugins/plugin2/gradle.properties View File

@@ -0,0 +1,6 @@
version=0.0.1

pluginId=hello-plugin
pluginClass=org.pf4j.demo.hello.HelloPlugin
pluginProvider=Decebal Suiu
pluginDependencies=

+ 0
- 5
demo_gradle/plugins/plugin2/plugin.properties View File

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

+ 16
- 39
demo_gradle/plugins/plugin3/build.gradle View 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.+'
}

+ 6
- 0
demo_gradle/plugins/plugin3/gradle.properties View File

@@ -0,0 +1,6 @@
version=1.0.0

pluginId=KotlinPlugin
pluginClass=org.pf4j.demo.kotlin.KotlinPlugin
pluginProvider=Anindya Chatterjee
pluginDependencies=

+ 6
- 3
demo_gradle/settings.gradle View 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'

Loading…
Cancel
Save