aboutsummaryrefslogtreecommitdiffstats
path: root/demo
diff options
context:
space:
mode:
Diffstat (limited to 'demo')
-rw-r--r--demo/gradle/.gitignore3
-rw-r--r--demo/gradle/README.md62
-rw-r--r--demo/gradle/api/.gitignore1
-rw-r--r--demo/gradle/api/build.gradle6
-rw-r--r--demo/gradle/api/src/main/java/org/pf4j/demo/api/Greeting.java (renamed from demo/api/src/main/java/org/pf4j/demo/api/Greeting.java)0
-rw-r--r--demo/gradle/app/.gitignore1
-rw-r--r--demo/gradle/app/build.gradle35
-rw-r--r--demo/gradle/app/src/main/java/org/pf4j/demo/Boot.java112
-rw-r--r--demo/gradle/app/src/main/java/org/pf4j/demo/WhazzupGreeting.java (renamed from demo/app/src/main/java/org/pf4j/demo/WhazzupGreeting.java)0
-rw-r--r--demo/gradle/app/src/main/resources/log4j.properties16
-rw-r--r--demo/gradle/build.gradle14
-rw-r--r--demo/gradle/gradle.properties2
-rw-r--r--demo/gradle/gradle/wrapper/gradle-wrapper.jarbin0 -> 43453 bytes
-rw-r--r--demo/gradle/gradle/wrapper/gradle-wrapper.properties7
-rwxr-xr-xdemo/gradle/gradlew249
-rw-r--r--demo/gradle/gradlew.bat92
-rw-r--r--demo/gradle/plugins/build.gradle33
-rw-r--r--demo/gradle/plugins/disabled.txt (renamed from demo/plugins/disabled.txt)0
-rw-r--r--demo/gradle/plugins/enabled.txt (renamed from demo/plugins/enabled.txt)0
-rw-r--r--demo/gradle/plugins/plugin1/.gitignore1
-rw-r--r--demo/gradle/plugins/plugin1/build.gradle11
-rw-r--r--demo/gradle/plugins/plugin1/gradle.properties6
-rw-r--r--demo/gradle/plugins/plugin1/src/main/java/org/pf4j/demo/welcome/WelcomePlugin.java59
-rw-r--r--demo/gradle/plugins/plugin2/.gitignore1
-rw-r--r--demo/gradle/plugins/plugin2/build.gradle11
-rw-r--r--demo/gradle/plugins/plugin2/gradle.properties6
-rw-r--r--demo/gradle/plugins/plugin2/src/main/java/org/pf4j/demo/hello/HelloPlugin.java57
-rw-r--r--demo/gradle/plugins/plugin3/build.gradle30
-rw-r--r--demo/gradle/plugins/plugin3/gradle.properties6
-rw-r--r--demo/gradle/plugins/plugin3/src/main/kotlin/org/pf4j/demo/kotlin/KotlinPlugin.kt48
-rw-r--r--demo/gradle/settings.gradle8
-rw-r--r--demo/maven/api/pom.xml (renamed from demo/api/pom.xml)0
-rw-r--r--demo/maven/api/src/main/java/org/pf4j/demo/api/DemoPlugin.java (renamed from demo/api/src/main/java/org/pf4j/demo/api/DemoPlugin.java)0
-rw-r--r--demo/maven/api/src/main/java/org/pf4j/demo/api/Greeting.java27
-rw-r--r--demo/maven/api/src/main/java/org/pf4j/demo/api/PluginContext.java (renamed from demo/api/src/main/java/org/pf4j/demo/api/PluginContext.java)0
-rw-r--r--demo/maven/app/pom.xml (renamed from demo/app/pom.xml)0
-rw-r--r--demo/maven/app/src/main/assembly/assembly.xml (renamed from demo/app/src/main/assembly/assembly.xml)0
-rw-r--r--demo/maven/app/src/main/java/org/pf4j/demo/Boot.java (renamed from demo/app/src/main/java/org/pf4j/demo/Boot.java)0
-rw-r--r--demo/maven/app/src/main/java/org/pf4j/demo/DemoPluginFactory.java (renamed from demo/app/src/main/java/org/pf4j/demo/DemoPluginFactory.java)0
-rw-r--r--demo/maven/app/src/main/java/org/pf4j/demo/DemoPluginManager.java (renamed from demo/app/src/main/java/org/pf4j/demo/DemoPluginManager.java)0
-rw-r--r--demo/maven/app/src/main/java/org/pf4j/demo/HowdyGreeting.java (renamed from demo/app/src/main/java/org/pf4j/demo/HowdyGreeting.java)0
-rw-r--r--demo/maven/app/src/main/java/org/pf4j/demo/WhazzupGreeting.java32
-rw-r--r--demo/maven/app/src/main/resources/META-INF/services/org.pf4j.demo.api.Greeting (renamed from demo/app/src/main/resources/META-INF/services/org.pf4j.demo.api.Greeting)0
-rwxr-xr-xdemo/maven/app/src/main/resources/simplelogger.properties (renamed from demo/app/src/main/resources/simplelogger.properties)0
-rw-r--r--demo/maven/plugins/disabled.txt6
-rw-r--r--demo/maven/plugins/enabled.txt6
-rw-r--r--demo/maven/plugins/plugin1/plugin.properties (renamed from demo/plugins/plugin1/plugin.properties)0
-rw-r--r--demo/maven/plugins/plugin1/pom.xml (renamed from demo/plugins/plugin1/pom.xml)0
-rw-r--r--demo/maven/plugins/plugin1/src/main/java/org/pf4j/demo/welcome/WelcomePlugin.java (renamed from demo/plugins/plugin1/src/main/java/org/pf4j/demo/welcome/WelcomePlugin.java)0
-rw-r--r--demo/maven/plugins/plugin2/plugin.properties (renamed from demo/plugins/plugin2/plugin.properties)0
-rw-r--r--demo/maven/plugins/plugin2/pom.xml (renamed from demo/plugins/plugin2/pom.xml)0
-rw-r--r--demo/maven/plugins/plugin2/src/main/java/org/pf4j/demo/hello/HelloPlugin.java (renamed from demo/plugins/plugin2/src/main/java/org/pf4j/demo/hello/HelloPlugin.java)0
-rw-r--r--demo/maven/plugins/pom.xml (renamed from demo/plugins/pom.xml)0
-rw-r--r--demo/maven/pom.xml (renamed from demo/pom.xml)1
54 files changed, 949 insertions, 0 deletions
diff --git a/demo/gradle/.gitignore b/demo/gradle/.gitignore
new file mode 100644
index 0000000..12ddda9
--- /dev/null
+++ b/demo/gradle/.gitignore
@@ -0,0 +1,3 @@
+build
+.gradle
+.idea
diff --git a/demo/gradle/README.md b/demo/gradle/README.md
new file mode 100644
index 0000000..5c8bc80
--- /dev/null
+++ b/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 `./gradlew 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
+
+```
+ ./gradlew app:run
+```
+
+2. The demo's output should look similar to: (Please see `Boot#main()` for more details)
+```
+[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 3.1.0 in 'deployment' mode
+[main] INFO org.pf4j.util.FileUtils - Expanded plugin zip 'plugin-hello-plugin-0.0.1.zip' in 'plugin-hello-plugin-0.0.1'
+[main] INFO org.pf4j.util.FileUtils - Expanded plugin zip 'plugin-KotlinPlugin-1.0.0.zip' in 'plugin-KotlinPlugin-1.0.0'
+[main] INFO org.pf4j.util.FileUtils - Expanded plugin zip 'plugin-welcome-plugin-0.0.1.zip' in 'plugin-welcome-plugin-0.0.1'
+[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 4 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 - >>> KotlinGreetings
+[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()
+```
+
diff --git a/demo/gradle/api/.gitignore b/demo/gradle/api/.gitignore
new file mode 100644
index 0000000..378eac2
--- /dev/null
+++ b/demo/gradle/api/.gitignore
@@ -0,0 +1 @@
+build
diff --git a/demo/gradle/api/build.gradle b/demo/gradle/api/build.gradle
new file mode 100644
index 0000000..a758f70
--- /dev/null
+++ b/demo/gradle/api/build.gradle
@@ -0,0 +1,6 @@
+dependencies {
+ implementation group: 'org.pf4j', name: 'pf4j', version: "${pf4jVersion}"
+ implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.5'
+
+ testImplementation group: 'junit', name: 'junit', version: '4.+'
+}
diff --git a/demo/api/src/main/java/org/pf4j/demo/api/Greeting.java b/demo/gradle/api/src/main/java/org/pf4j/demo/api/Greeting.java
index 828d61b..828d61b 100644
--- a/demo/api/src/main/java/org/pf4j/demo/api/Greeting.java
+++ b/demo/gradle/api/src/main/java/org/pf4j/demo/api/Greeting.java
diff --git a/demo/gradle/app/.gitignore b/demo/gradle/app/.gitignore
new file mode 100644
index 0000000..378eac2
--- /dev/null
+++ b/demo/gradle/app/.gitignore
@@ -0,0 +1 @@
+build
diff --git a/demo/gradle/app/build.gradle b/demo/gradle/app/build.gradle
new file mode 100644
index 0000000..eaab92a
--- /dev/null
+++ b/demo/gradle/app/build.gradle
@@ -0,0 +1,35 @@
+apply plugin: 'application'
+
+mainClassName = 'org.pf4j.demo.Boot'
+run {
+ systemProperty 'pf4j.pluginsDir', '../build/plugins'
+}
+
+dependencies {
+ implementation project(':api')
+ implementation group: 'org.pf4j', name: 'pf4j', version: "${pf4jVersion}"
+ annotationProcessor(group: 'org.pf4j', name: 'pf4j', version: "${pf4jVersion}")
+ implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.5'
+ implementation group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25'
+
+ testImplementation group: 'junit', name: 'junit', version: '4.+'
+}
+
+task uberjar(type: Jar, dependsOn: ['compileJava']) {
+ zip64 true
+ from configurations.runtimeClasspath.asFileTree.files.collect {
+ exclude "META-INF/*.SF"
+ exclude "META-INF/*.DSA"
+ exclude "META-INF/*.RSA"
+ zipTree(it)
+ }
+ from files(sourceSets.main.output.classesDirs)
+ from files(sourceSets.main.resources)
+ manifest {
+ attributes 'Main-Class': mainClassName
+ }
+
+ archiveBaseName = "${project.name}-plugin-demo"
+ archiveClassifier = "uberjar"
+}
+
diff --git a/demo/gradle/app/src/main/java/org/pf4j/demo/Boot.java b/demo/gradle/app/src/main/java/org/pf4j/demo/Boot.java
new file mode 100644
index 0000000..ebc5c31
--- /dev/null
+++ b/demo/gradle/app/src/main/java/org/pf4j/demo/Boot.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2012-present the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+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;
+import org.pf4j.PluginManager;
+import org.pf4j.PluginWrapper;
+import org.pf4j.demo.api.Greeting;
+
+import java.util.List;
+
+/**
+ * A boot class that start the demo.
+ *
+ * @author Decebal Suiu
+ */
+public class Boot {
+ private static final Logger logger = LoggerFactory.getLogger(Boot.class);
+
+ public static void main(String[] args) {
+ // print logo
+ printLogo();
+
+ // create the plugin manager
+ 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();
+
+ // enable a disabled plugin
+// pluginManager.enablePlugin("welcome-plugin");
+
+ // start (active/resolved) the plugins
+ pluginManager.startPlugins();
+
+ logger.info("Plugindirectory: ");
+ logger.info("\t" + System.getProperty("pf4j.pluginsDir", "plugins") + "\n");
+
+ // retrieves the extensions for Greeting extension point
+ List<Greeting> greetings = pluginManager.getExtensions(Greeting.class);
+ logger.info(String.format("Found %d extensions for extension point '%s'", greetings.size(), Greeting.class.getName()));
+ for (Greeting greeting : greetings) {
+ logger.info(">>> " + greeting.getGreeting());
+ }
+
+ // // print extensions from classpath (non plugin)
+ // logger.info(String.format("Extensions added by classpath:"));
+ // Set<String> extensionClassNames = pluginManager.getExtensionClassNames(null);
+ // for (String extension : extensionClassNames) {
+ // logger.info(" " + extension);
+ // }
+
+ // print extensions for each started plugin
+ List<PluginWrapper> startedPlugins = pluginManager.getStartedPlugins();
+ for (PluginWrapper plugin : startedPlugins) {
+ String pluginId = plugin.getDescriptor().getPluginId();
+ logger.info(String.format("Extensions added by plugin '%s':", pluginId));
+ // extensionClassNames = pluginManager.getExtensionClassNames(pluginId);
+ // for (String extension : extensionClassNames) {
+ // logger.info(" " + extension);
+ // }
+ }
+
+ // stop the plugins
+ pluginManager.stopPlugins();
+ /*
+ Runtime.getRuntime().addShutdownHook(new Thread() {
+
+ @Override
+ public void run() {
+ pluginManager.stopPlugins();
+ }
+
+ });
+ */
+ }
+
+ private static void printLogo() {
+ logger.info(StringUtils.repeat("#", 40));
+ logger.info(StringUtils.center("PF4J-DEMO", 40));
+ logger.info(StringUtils.repeat("#", 40));
+ }
+
+}
diff --git a/demo/app/src/main/java/org/pf4j/demo/WhazzupGreeting.java b/demo/gradle/app/src/main/java/org/pf4j/demo/WhazzupGreeting.java
index 1341b77..1341b77 100644
--- a/demo/app/src/main/java/org/pf4j/demo/WhazzupGreeting.java
+++ b/demo/gradle/app/src/main/java/org/pf4j/demo/WhazzupGreeting.java
diff --git a/demo/gradle/app/src/main/resources/log4j.properties b/demo/gradle/app/src/main/resources/log4j.properties
new file mode 100644
index 0000000..f42e226
--- /dev/null
+++ b/demo/gradle/app/src/main/resources/log4j.properties
@@ -0,0 +1,16 @@
+log4j.rootLogger=DEBUG, Console
+
+#
+# PF4J log
+#
+log4j.logger.org.pf4j=DEBUG, Console
+log4j.logger.org.pf4j.PluginClassLoader=WARN, Console
+log4j.additivity.org.pf4j=false
+
+#
+# Appenders
+#
+log4j.appender.Console=org.apache.log4j.ConsoleAppender
+log4j.appender.Console.layout=org.apache.log4j.PatternLayout
+#log4j.appender.Console.layout.conversionPattern=%-5p - %-32.32c{1} - %m\n
+log4j.appender.Console.layout.ConversionPattern=%d %p %c - %m%n
diff --git a/demo/gradle/build.gradle b/demo/gradle/build.gradle
new file mode 100644
index 0000000..9968360
--- /dev/null
+++ b/demo/gradle/build.gradle
@@ -0,0 +1,14 @@
+subprojects {
+ apply plugin: 'java'
+
+ repositories {
+ mavenLocal()
+ mavenCentral()
+ }
+}
+// plugin location
+ext.pluginsDir = rootProject.buildDir.path + '/plugins'
+
+task build(dependsOn: [':app:uberjar'])
+
+
diff --git a/demo/gradle/gradle.properties b/demo/gradle/gradle.properties
new file mode 100644
index 0000000..4000315
--- /dev/null
+++ b/demo/gradle/gradle.properties
@@ -0,0 +1,2 @@
+# PF4J
+pf4jVersion=3.1.0
diff --git a/demo/gradle/gradle/wrapper/gradle-wrapper.jar b/demo/gradle/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..e644113
--- /dev/null
+++ b/demo/gradle/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/demo/gradle/gradle/wrapper/gradle-wrapper.properties b/demo/gradle/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..a441313
--- /dev/null
+++ b/demo/gradle/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,7 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
+networkTimeout=10000
+validateDistributionUrl=true
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/demo/gradle/gradlew b/demo/gradle/gradlew
new file mode 100755
index 0000000..b740cf1
--- /dev/null
+++ b/demo/gradle/gradlew
@@ -0,0 +1,249 @@
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+#
+# Gradle start up script for POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh Gradle
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (3) This script is generated from the Groovy template
+# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
+done
+
+# This is normally unused
+# shellcheck disable=SC2034
+APP_BASE_NAME=${0##*/}
+# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
+APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+ echo "$*"
+} >&2
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD=$JAVA_HOME/jre/sh/java
+ else
+ JAVACMD=$JAVA_HOME/bin/java
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD=java
+ if ! command -v java >/dev/null 2>&1
+ then
+ die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
+ fi
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
+ done
+fi
+
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Collect all arguments for the java command:
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
+# and any embedded shellness will be escaped.
+# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
+# treated as '${Hostname}' itself on the command line.
+
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -classpath "$CLASSPATH" \
+ org.gradle.wrapper.GradleWrapperMain \
+ "$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+ die "xargs is not available"
+fi
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/demo/gradle/gradlew.bat b/demo/gradle/gradlew.bat
new file mode 100644
index 0000000..7101f8e
--- /dev/null
+++ b/demo/gradle/gradlew.bat
@@ -0,0 +1,92 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%"=="" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if %ERRORLEVEL% equ 0 goto execute
+
+echo. 1>&2
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo. 1>&2
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if %ERRORLEVEL% equ 0 goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/demo/gradle/plugins/build.gradle b/demo/gradle/plugins/build.gradle
new file mode 100644
index 0000000..4b03210
--- /dev/null
+++ b/demo/gradle/plugins/build.gradle
@@ -0,0 +1,33 @@
+subprojects {
+ jar {
+ manifest {
+ attributes 'Plugin-Class': "${pluginClass}",
+ 'Plugin-Id': "${pluginId}",
+ 'Plugin-Version': "${archiveVersion}",
+ 'Plugin-Provider': "${pluginProvider}",
+ 'Plugin-Dependencies': "${pluginDependencies}"
+ }
+ }
+
+ task plugin(type: Jar) {
+ archiveBaseName = "plugin-${pluginId}"
+ into('classes') {
+ with jar
+ }
+ into('lib') {
+ from configurations.runtimeClasspath
+ }
+ archiveExtension ='zip'
+ }
+
+ task assemblePlugin(type: Copy) {
+ from plugin
+ into pluginsDir
+ }
+}
+
+task assemblePlugins(type: Copy) {
+ dependsOn subprojects.assemblePlugin
+}
+
+build.dependsOn project.tasks.assemblePlugins
diff --git a/demo/plugins/disabled.txt b/demo/gradle/plugins/disabled.txt
index 45f1801..45f1801 100644
--- a/demo/plugins/disabled.txt
+++ b/demo/gradle/plugins/disabled.txt
diff --git a/demo/plugins/enabled.txt b/demo/gradle/plugins/enabled.txt
index 3d76b2f..3d76b2f 100644
--- a/demo/plugins/enabled.txt
+++ b/demo/gradle/plugins/enabled.txt
diff --git a/demo/gradle/plugins/plugin1/.gitignore b/demo/gradle/plugins/plugin1/.gitignore
new file mode 100644
index 0000000..378eac2
--- /dev/null
+++ b/demo/gradle/plugins/plugin1/.gitignore
@@ -0,0 +1 @@
+build
diff --git a/demo/gradle/plugins/plugin1/build.gradle b/demo/gradle/plugins/plugin1/build.gradle
new file mode 100644
index 0000000..78eef47
--- /dev/null
+++ b/demo/gradle/plugins/plugin1/build.gradle
@@ -0,0 +1,11 @@
+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')
+ compileOnly(group: 'org.pf4j', name: 'pf4j', version: "${pf4jVersion}") {
+ exclude group: "org.slf4j"
+ }
+ annotationProcessor(group: 'org.pf4j', name: 'pf4j', version: "${pf4jVersion}")
+ implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.5'
+ implementation group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25'
+ testImplementation 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
index 0000000..2edd800
--- /dev/null
+++ b/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=
diff --git a/demo/gradle/plugins/plugin1/src/main/java/org/pf4j/demo/welcome/WelcomePlugin.java b/demo/gradle/plugins/plugin1/src/main/java/org/pf4j/demo/welcome/WelcomePlugin.java
new file mode 100644
index 0000000..aaf1804
--- /dev/null
+++ b/demo/gradle/plugins/plugin1/src/main/java/org/pf4j/demo/welcome/WelcomePlugin.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2012-present the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.pf4j.demo.welcome;
+
+import org.apache.commons.lang3.StringUtils;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.pf4j.Extension;
+import org.pf4j.Plugin;
+import org.pf4j.PluginWrapper;
+import org.pf4j.demo.api.Greeting;
+
+/**
+ * @author Decebal Suiu
+ */
+public class WelcomePlugin extends Plugin {
+
+ private static final Logger logger = LoggerFactory.getLogger(WelcomePlugin.class);
+
+ public WelcomePlugin(PluginWrapper wrapper) {
+ super(wrapper);
+ }
+
+ @Override
+ public void start() {
+ logger.info("WelcomePlugin.start()");
+ logger.info(StringUtils.upperCase("WelcomePlugin"));
+ }
+
+ @Override
+ public void stop() {
+ logger.info("WelcomePlugin.stop()");
+ }
+
+ @Extension
+ public static class WelcomeGreeting implements Greeting {
+
+ @Override
+ public String getGreeting() {
+ return "Welcome";
+ }
+
+ }
+
+}
diff --git a/demo/gradle/plugins/plugin2/.gitignore b/demo/gradle/plugins/plugin2/.gitignore
new file mode 100644
index 0000000..378eac2
--- /dev/null
+++ b/demo/gradle/plugins/plugin2/.gitignore
@@ -0,0 +1 @@
+build
diff --git a/demo/gradle/plugins/plugin2/build.gradle b/demo/gradle/plugins/plugin2/build.gradle
new file mode 100644
index 0000000..78eef47
--- /dev/null
+++ b/demo/gradle/plugins/plugin2/build.gradle
@@ -0,0 +1,11 @@
+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')
+ compileOnly(group: 'org.pf4j', name: 'pf4j', version: "${pf4jVersion}") {
+ exclude group: "org.slf4j"
+ }
+ annotationProcessor(group: 'org.pf4j', name: 'pf4j', version: "${pf4jVersion}")
+ implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.5'
+ implementation group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25'
+ testImplementation 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
index 0000000..ef70127
--- /dev/null
+++ b/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=
diff --git a/demo/gradle/plugins/plugin2/src/main/java/org/pf4j/demo/hello/HelloPlugin.java b/demo/gradle/plugins/plugin2/src/main/java/org/pf4j/demo/hello/HelloPlugin.java
new file mode 100644
index 0000000..f9c7797
--- /dev/null
+++ b/demo/gradle/plugins/plugin2/src/main/java/org/pf4j/demo/hello/HelloPlugin.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2012-present the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.pf4j.demo.hello;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.pf4j.Extension;
+import org.pf4j.Plugin;
+import org.pf4j.PluginWrapper;
+import org.pf4j.demo.api.Greeting;
+
+/**
+ * A very simple plugin.
+ *
+ * @author Decebal Suiu
+ */
+public class HelloPlugin extends Plugin {
+ private static final Logger logger = LoggerFactory.getLogger(HelloPlugin.class);
+
+ public HelloPlugin(PluginWrapper wrapper) {
+ super(wrapper);
+ }
+
+ @Override
+ public void start() {
+ logger.info("HelloPlugin.start()");
+ }
+
+ @Override
+ public void stop() {
+ logger.info("HelloPlugin.stop()");
+ }
+
+ @Extension(ordinal=1)
+ public static class HelloGreeting implements Greeting {
+
+ @Override
+ public String getGreeting() {
+ return "Hello";
+ }
+
+ }
+
+}
diff --git a/demo/gradle/plugins/plugin3/build.gradle b/demo/gradle/plugins/plugin3/build.gradle
new file mode 100644
index 0000000..4371251
--- /dev/null
+++ b/demo/gradle/plugins/plugin3/build.gradle
@@ -0,0 +1,30 @@
+buildscript {
+ ext.kotlin_version = '1.9.24'
+
+ repositories {
+ mavenCentral()
+ }
+ dependencies {
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
+ }
+}
+
+apply plugin: 'kotlin'
+apply plugin: 'kotlin-kapt'
+
+repositories {
+ mavenCentral()
+}
+
+dependencies {
+ compileOnly project(':api')
+ compileOnly(group: 'org.pf4j', name: 'pf4j', version: "${pf4jVersion}") {
+ exclude group: "org.slf4j"
+ }
+ kapt(group: 'org.pf4j', name: 'pf4j', version: "${pf4jVersion}")
+ implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.5'
+ implementation group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25'
+ implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
+
+ testImplementation 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
index 0000000..a04b609
--- /dev/null
+++ b/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=
diff --git a/demo/gradle/plugins/plugin3/src/main/kotlin/org/pf4j/demo/kotlin/KotlinPlugin.kt b/demo/gradle/plugins/plugin3/src/main/kotlin/org/pf4j/demo/kotlin/KotlinPlugin.kt
new file mode 100644
index 0000000..2b2bc17
--- /dev/null
+++ b/demo/gradle/plugins/plugin3/src/main/kotlin/org/pf4j/demo/kotlin/KotlinPlugin.kt
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.pf4j.demo.kotlin
+
+import org.apache.commons.lang3.StringUtils
+import org.slf4j.LoggerFactory
+import org.pf4j.Extension
+import org.pf4j.Plugin
+import org.pf4j.PluginWrapper
+import org.pf4j.demo.api.Greeting
+
+/**
+ * A sample plugin written in Kotlin
+ *
+ * @author Anindya Chatterjee
+ */
+class KotlinPlugin(wrapper: PluginWrapper) : Plugin(wrapper) {
+ private val logger = LoggerFactory.getLogger(KotlinPlugin::class.java)
+
+ override fun start() {
+ logger.info("KotlinPlugin.start()")
+ logger.info(StringUtils.upperCase("KotlinPlugin"))
+ }
+
+ override fun stop() {
+ logger.info("KotlinPlugin.stop()")
+ }
+}
+
+@Extension
+class KotlinGreeting : Greeting {
+ override fun getGreeting(): String {
+ return "KotlinGreetings"
+ }
+}
diff --git a/demo/gradle/settings.gradle b/demo/gradle/settings.gradle
new file mode 100644
index 0000000..828e80a
--- /dev/null
+++ b/demo/gradle/settings.gradle
@@ -0,0 +1,8 @@
+include 'api'
+include 'app'
+
+include 'plugins'
+
+include 'plugins:plugin1'
+include 'plugins:plugin2'
+include 'plugins:plugin3'
diff --git a/demo/api/pom.xml b/demo/maven/api/pom.xml
index 615aa30..615aa30 100644
--- a/demo/api/pom.xml
+++ b/demo/maven/api/pom.xml
diff --git a/demo/api/src/main/java/org/pf4j/demo/api/DemoPlugin.java b/demo/maven/api/src/main/java/org/pf4j/demo/api/DemoPlugin.java
index a2f76fc..a2f76fc 100644
--- a/demo/api/src/main/java/org/pf4j/demo/api/DemoPlugin.java
+++ b/demo/maven/api/src/main/java/org/pf4j/demo/api/DemoPlugin.java
diff --git a/demo/maven/api/src/main/java/org/pf4j/demo/api/Greeting.java b/demo/maven/api/src/main/java/org/pf4j/demo/api/Greeting.java
new file mode 100644
index 0000000..828d61b
--- /dev/null
+++ b/demo/maven/api/src/main/java/org/pf4j/demo/api/Greeting.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2012-present the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.pf4j.demo.api;
+
+import org.pf4j.ExtensionPoint;
+
+/**
+ * @author Decebal Suiu
+ */
+public interface Greeting extends ExtensionPoint {
+
+ String getGreeting();
+
+}
diff --git a/demo/api/src/main/java/org/pf4j/demo/api/PluginContext.java b/demo/maven/api/src/main/java/org/pf4j/demo/api/PluginContext.java
index 0a7506f..0a7506f 100644
--- a/demo/api/src/main/java/org/pf4j/demo/api/PluginContext.java
+++ b/demo/maven/api/src/main/java/org/pf4j/demo/api/PluginContext.java
diff --git a/demo/app/pom.xml b/demo/maven/app/pom.xml
index 963bb60..963bb60 100644
--- a/demo/app/pom.xml
+++ b/demo/maven/app/pom.xml
diff --git a/demo/app/src/main/assembly/assembly.xml b/demo/maven/app/src/main/assembly/assembly.xml
index 77c66b4..77c66b4 100644
--- a/demo/app/src/main/assembly/assembly.xml
+++ b/demo/maven/app/src/main/assembly/assembly.xml
diff --git a/demo/app/src/main/java/org/pf4j/demo/Boot.java b/demo/maven/app/src/main/java/org/pf4j/demo/Boot.java
index d101104..d101104 100644
--- a/demo/app/src/main/java/org/pf4j/demo/Boot.java
+++ b/demo/maven/app/src/main/java/org/pf4j/demo/Boot.java
diff --git a/demo/app/src/main/java/org/pf4j/demo/DemoPluginFactory.java b/demo/maven/app/src/main/java/org/pf4j/demo/DemoPluginFactory.java
index bdae2d6..bdae2d6 100644
--- a/demo/app/src/main/java/org/pf4j/demo/DemoPluginFactory.java
+++ b/demo/maven/app/src/main/java/org/pf4j/demo/DemoPluginFactory.java
diff --git a/demo/app/src/main/java/org/pf4j/demo/DemoPluginManager.java b/demo/maven/app/src/main/java/org/pf4j/demo/DemoPluginManager.java
index 2571a3e..2571a3e 100644
--- a/demo/app/src/main/java/org/pf4j/demo/DemoPluginManager.java
+++ b/demo/maven/app/src/main/java/org/pf4j/demo/DemoPluginManager.java
diff --git a/demo/app/src/main/java/org/pf4j/demo/HowdyGreeting.java b/demo/maven/app/src/main/java/org/pf4j/demo/HowdyGreeting.java
index 050934d..050934d 100644
--- a/demo/app/src/main/java/org/pf4j/demo/HowdyGreeting.java
+++ b/demo/maven/app/src/main/java/org/pf4j/demo/HowdyGreeting.java
diff --git a/demo/maven/app/src/main/java/org/pf4j/demo/WhazzupGreeting.java b/demo/maven/app/src/main/java/org/pf4j/demo/WhazzupGreeting.java
new file mode 100644
index 0000000..1341b77
--- /dev/null
+++ b/demo/maven/app/src/main/java/org/pf4j/demo/WhazzupGreeting.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2012-present the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.pf4j.demo;
+
+import org.pf4j.Extension;
+import org.pf4j.demo.api.Greeting;
+
+/**
+ * @author Decebal Suiu
+ */
+@Extension
+public class WhazzupGreeting implements Greeting {
+
+ @Override
+ public String getGreeting() {
+ return "Whazzup";
+ }
+
+}
diff --git a/demo/app/src/main/resources/META-INF/services/org.pf4j.demo.api.Greeting b/demo/maven/app/src/main/resources/META-INF/services/org.pf4j.demo.api.Greeting
index 615a943..615a943 100644
--- a/demo/app/src/main/resources/META-INF/services/org.pf4j.demo.api.Greeting
+++ b/demo/maven/app/src/main/resources/META-INF/services/org.pf4j.demo.api.Greeting
diff --git a/demo/app/src/main/resources/simplelogger.properties b/demo/maven/app/src/main/resources/simplelogger.properties
index 40302dd..40302dd 100755
--- a/demo/app/src/main/resources/simplelogger.properties
+++ b/demo/maven/app/src/main/resources/simplelogger.properties
diff --git a/demo/maven/plugins/disabled.txt b/demo/maven/plugins/disabled.txt
new file mode 100644
index 0000000..45f1801
--- /dev/null
+++ b/demo/maven/plugins/disabled.txt
@@ -0,0 +1,6 @@
+########################################
+# - load all plugins except these
+# - add one plugin id on each line
+# - put this file in plugins folder
+########################################
+#welcome-plugin
diff --git a/demo/maven/plugins/enabled.txt b/demo/maven/plugins/enabled.txt
new file mode 100644
index 0000000..3d76b2f
--- /dev/null
+++ b/demo/maven/plugins/enabled.txt
@@ -0,0 +1,6 @@
+########################################
+# - load only these plugins
+# - add one plugin id on each line
+# - put this file in plugins folder
+########################################
+#welcome-plugin
diff --git a/demo/plugins/plugin1/plugin.properties b/demo/maven/plugins/plugin1/plugin.properties
index 9da9bcc..9da9bcc 100644
--- a/demo/plugins/plugin1/plugin.properties
+++ b/demo/maven/plugins/plugin1/plugin.properties
diff --git a/demo/plugins/plugin1/pom.xml b/demo/maven/plugins/plugin1/pom.xml
index 5873fdd..5873fdd 100644
--- a/demo/plugins/plugin1/pom.xml
+++ b/demo/maven/plugins/plugin1/pom.xml
diff --git a/demo/plugins/plugin1/src/main/java/org/pf4j/demo/welcome/WelcomePlugin.java b/demo/maven/plugins/plugin1/src/main/java/org/pf4j/demo/welcome/WelcomePlugin.java
index 3064902..3064902 100644
--- a/demo/plugins/plugin1/src/main/java/org/pf4j/demo/welcome/WelcomePlugin.java
+++ b/demo/maven/plugins/plugin1/src/main/java/org/pf4j/demo/welcome/WelcomePlugin.java
diff --git a/demo/plugins/plugin2/plugin.properties b/demo/maven/plugins/plugin2/plugin.properties
index 60b6f33..60b6f33 100644
--- a/demo/plugins/plugin2/plugin.properties
+++ b/demo/maven/plugins/plugin2/plugin.properties
diff --git a/demo/plugins/plugin2/pom.xml b/demo/maven/plugins/plugin2/pom.xml
index 82ed985..82ed985 100644
--- a/demo/plugins/plugin2/pom.xml
+++ b/demo/maven/plugins/plugin2/pom.xml
diff --git a/demo/plugins/plugin2/src/main/java/org/pf4j/demo/hello/HelloPlugin.java b/demo/maven/plugins/plugin2/src/main/java/org/pf4j/demo/hello/HelloPlugin.java
index ed67878..ed67878 100644
--- a/demo/plugins/plugin2/src/main/java/org/pf4j/demo/hello/HelloPlugin.java
+++ b/demo/maven/plugins/plugin2/src/main/java/org/pf4j/demo/hello/HelloPlugin.java
diff --git a/demo/plugins/pom.xml b/demo/maven/plugins/pom.xml
index 13d41f6..13d41f6 100644
--- a/demo/plugins/pom.xml
+++ b/demo/maven/plugins/pom.xml
diff --git a/demo/pom.xml b/demo/maven/pom.xml
index 5e8a8b6..36a0738 100644
--- a/demo/pom.xml
+++ b/demo/maven/pom.xml
@@ -5,6 +5,7 @@
<groupId>org.pf4j</groupId>
<artifactId>pf4j-parent</artifactId>
<version>3.12.0-SNAPSHOT</version>
+ <relativePath>../..</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>