build |
build |
dependencies { | |||||
compile 'ro.fortsoft.pf4j:pf4j:0.4' | |||||
compile 'org.apache.commons:commons-lang3:3.0' | |||||
testCompile group: 'junit', name: 'junit', version: '4.+' | |||||
} |
/* | |||||
* Copyright 2012 Decebal Suiu | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in compliance with | |||||
* the License. You may obtain a copy of the License in the LICENSE file, or 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 ro.fortsoft.pf4j.demo.api; | |||||
import ro.fortsoft.pf4j.ExtensionPoint; | |||||
/** | |||||
* @author Decebal Suiu | |||||
*/ | |||||
public interface Greeting extends ExtensionPoint { | |||||
public String getGreeting(); | |||||
} |
build |
dependencies { | |||||
compile project(':api') | |||||
compile 'ro.fortsoft.pf4j:pf4j:0.4' | |||||
compile 'org.apache.commons:commons-lang3:3.0' | |||||
testCompile group: 'junit', name: 'junit', version: '4.+' | |||||
} | |||||
jar { | |||||
baseName = 'Plugin Demo' | |||||
version = '0.1.0' | |||||
} |
/* | |||||
* Copyright 2012 Decebal Suiu | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in compliance with | |||||
* the License. You may obtain a copy of the License in the LICENSE file, or 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 ro.fortsoft.pf4j.demo; | |||||
import java.util.List; | |||||
import java.util.Set; | |||||
import org.apache.commons.lang.StringUtils; | |||||
import ro.fortsoft.pf4j.DefaultPluginManager; | |||||
import ro.fortsoft.pf4j.PluginManager; | |||||
import ro.fortsoft.pf4j.PluginWrapper; | |||||
import ro.fortsoft.pf4j.demo.api.Greeting; | |||||
/** | |||||
* A boot class that start the demo. | |||||
* | |||||
* @author Decebal Suiu | |||||
*/ | |||||
public class Boot { | |||||
public static void main(String[] args) { | |||||
// print logo | |||||
printLogo(); | |||||
// create the plugin manager | |||||
final PluginManager pluginManager = new DefaultPluginManager(); | |||||
// load the plugins | |||||
pluginManager.loadPlugins(); | |||||
// enable a disabled plugin | |||||
// pluginManager.enablePlugin("welcome-plugin"); | |||||
// start (active/resolved) the plugins | |||||
pluginManager.startPlugins(); | |||||
// retrieves the extensions for Greeting extension point | |||||
List<Greeting> greetings = pluginManager.getExtensions(Greeting.class); | |||||
System.out.println(String.format("Found %d extensions for extension point '%s'", greetings.size(), Greeting.class.getName())); | |||||
for (Greeting greeting : greetings) { | |||||
System.out.println(">>> " + greeting.getGreeting()); | |||||
} | |||||
// print extensions from classpath (non plugin) | |||||
System.out.println(String.format("Extensions added by classpath:")); | |||||
Set<String> extensionClassNames = pluginManager.getExtensionClassNames(null); | |||||
for (String extension : extensionClassNames) { | |||||
System.out.println(" " + extension); | |||||
} | |||||
// print extensions for each started plugin | |||||
List<PluginWrapper> startedPlugins = pluginManager.getStartedPlugins(); | |||||
for (PluginWrapper plugin : startedPlugins) { | |||||
String pluginId = plugin.getDescriptor().getPluginId(); | |||||
System.out.println(String.format("Extensions added by plugin '%s':", pluginId)); | |||||
extensionClassNames = pluginManager.getExtensionClassNames(pluginId); | |||||
for (String extension : extensionClassNames) { | |||||
System.out.println(" " + extension); | |||||
} | |||||
} | |||||
// stop the plugins | |||||
pluginManager.stopPlugins(); | |||||
/* | |||||
Runtime.getRuntime().addShutdownHook(new Thread() { | |||||
@Override | |||||
public void run() { | |||||
pluginManager.stopPlugins(); | |||||
} | |||||
}); | |||||
*/ | |||||
} | |||||
private static void printLogo() { | |||||
System.out.println(StringUtils.repeat("#", 40)); | |||||
System.out.println(StringUtils.center("PF4J-DEMO", 40)); | |||||
System.out.println(StringUtils.repeat("#", 40)); | |||||
} | |||||
} |
/* | |||||
* Copyright 2014 Decebal Suiu | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in compliance with | |||||
* the License. You may obtain a copy of the License in the LICENSE file, or 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 ro.fortsoft.pf4j.demo; | |||||
import ro.fortsoft.pf4j.Extension; | |||||
import ro.fortsoft.pf4j.demo.api.Greeting; | |||||
/** | |||||
* @author Decebal Suiu | |||||
*/ | |||||
@Extension | |||||
public class WhazzupGreeting implements Greeting { | |||||
@Override | |||||
public String getGreeting() { | |||||
return "Whazzup"; | |||||
} | |||||
} |
log4j.rootLogger=DEBUG, Console | |||||
# | |||||
# PF4J log | |||||
# | |||||
log4j.logger.ro.fortsoft.pf4j=DEBUG, Console | |||||
log4j.logger.ro.fortsoft.pf4j.PluginClassLoader=WARN, Console | |||||
log4j.additivity.ro.fortsoft.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 |
subprojects { | |||||
apply plugin: 'java' | |||||
repositories { | |||||
mavenLocal() | |||||
mavenCentral() | |||||
} | |||||
task wrapper(type: Wrapper) { | |||||
gradleVersion = '1.11' | |||||
} | |||||
} |
######################################## | |||||
# - load all plugins except these | |||||
# - add one plugin id on each line | |||||
# - put this file in plugins folder | |||||
######################################## | |||||
#welcome-plugin |
######################################## | |||||
# - load only these plugins | |||||
# - add one plugin id on each line | |||||
# - put this file in plugins folder | |||||
######################################## | |||||
#welcome-plugin |
build |
jar { | |||||
baseName = 'WelcomePlugin' | |||||
version = '0.1.0' | |||||
manifest { | |||||
attributes 'Plugin-Class' : 'ro.fortsoft.pf4j.demo.welcome.WelcomePlugin', | |||||
'Plugin-Id' : 'WelcomePlugin', | |||||
'Plugin-Version' : '1.0', | |||||
'Plugin-Provider' : 'Yannick Bäumer' | |||||
} | |||||
} | |||||
task plugin(type: Jar) { | |||||
baseName = 'WelcomePlugin' | |||||
version = '0.1.0' | |||||
into('classes') | |||||
extension('zip') | |||||
with jar | |||||
} | |||||
dependencies { | |||||
compile project(':api') | |||||
compile 'ro.fortsoft.pf4j:pf4j:0.4' | |||||
compile 'org.apache.commons:commons-lang3:3.0' | |||||
testCompile group: 'junit', name: 'junit', version: '4.+' | |||||
} |
plugin.id=welcome-plugin | |||||
plugin.class=ro.fortsoft.pf4j.demo.welcome.WelcomePlugin | |||||
plugin.version=0.0.1 | |||||
plugin.provider=Decebal Suiu | |||||
plugin.dependencies= |
/* | |||||
* Copyright 2012 Decebal Suiu | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in compliance with | |||||
* the License. You may obtain a copy of the License in the LICENSE file, or 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 ro.fortsoft.pf4j.demo.welcome; | |||||
import org.apache.commons.lang.StringUtils; | |||||
import ro.fortsoft.pf4j.Extension; | |||||
import ro.fortsoft.pf4j.Plugin; | |||||
import ro.fortsoft.pf4j.PluginWrapper; | |||||
import ro.fortsoft.pf4j.RuntimeMode; | |||||
import ro.fortsoft.pf4j.demo.api.Greeting; | |||||
/** | |||||
* @author Decebal Suiu | |||||
*/ | |||||
public class WelcomePlugin extends Plugin { | |||||
public WelcomePlugin(PluginWrapper wrapper) { | |||||
super(wrapper); | |||||
} | |||||
@Override | |||||
public void start() { | |||||
System.out.println("WelcomePlugin.start()"); | |||||
// for testing the development mode | |||||
if (RuntimeMode.DEVELOPMENT.equals(wrapper.getRuntimeMode())) { | |||||
System.out.println(StringUtils.upperCase("WelcomePlugin")); | |||||
} | |||||
} | |||||
@Override | |||||
public void stop() { | |||||
System.out.println("WelcomePlugin.stop()"); | |||||
} | |||||
@Extension | |||||
public static class WelcomeGreeting implements Greeting { | |||||
@Override | |||||
public String getGreeting() { | |||||
return "Welcome"; | |||||
} | |||||
} | |||||
} |
build |
jar { | |||||
baseName = 'HelloPlugin' | |||||
version = '0.1.0' | |||||
manifest { | |||||
attributes 'Plugin-Class' : 'ro.fortsoft.pf4j.demo.welcome.HelloPlugin', | |||||
'Plugin-Id' : 'HelloPlugin', | |||||
'Plugin-Version' : '1.0', | |||||
'Plugin-Provider' : 'Yannick Bäumer' | |||||
} | |||||
} | |||||
task plugin(type: Jar) { | |||||
baseName = 'HelloPlugin' | |||||
version = '0.1.0' | |||||
into('classes') | |||||
extension('zip') | |||||
with jar | |||||
} | |||||
dependencies { | |||||
compile project(':api') | |||||
compile 'ro.fortsoft.pf4j:pf4j:0.4' | |||||
compile 'org.apache.commons:commons-lang3:3.0' | |||||
testCompile group: 'junit', name: 'junit', version: '4.+' | |||||
} |
plugin.id=hello-plugin | |||||
plugin.class=ro.fortsoft.pf4j.demo.hello.HelloPlugin | |||||
plugin.version=0.0.1 | |||||
plugin.provider=Decebal Suiu | |||||
plugin.dependencies= |
/* | |||||
* Copyright 2012 Decebal Suiu | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in compliance with | |||||
* the License. You may obtain a copy of the License in the LICENSE file, or 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 ro.fortsoft.pf4j.demo.hello; | |||||
import ro.fortsoft.pf4j.Extension; | |||||
import ro.fortsoft.pf4j.Plugin; | |||||
import ro.fortsoft.pf4j.PluginWrapper; | |||||
import ro.fortsoft.pf4j.demo.api.Greeting; | |||||
/** | |||||
* A very simple plugin. | |||||
* | |||||
* @author Decebal Suiu | |||||
*/ | |||||
public class HelloPlugin extends Plugin { | |||||
public HelloPlugin(PluginWrapper wrapper) { | |||||
super(wrapper); | |||||
} | |||||
@Override | |||||
public void start() { | |||||
System.out.println("HelloPlugin.start()"); | |||||
} | |||||
@Override | |||||
public void stop() { | |||||
System.out.println("HelloPlugin.stop()"); | |||||
} | |||||
@Extension(ordinal=1) | |||||
public static class HelloGreeting implements Greeting { | |||||
@Override | |||||
public String getGreeting() { | |||||
return "Hello"; | |||||
} | |||||
} | |||||
} |
include 'api' | |||||
include 'app' | |||||
include 'plugins' |