From b325ede7639e81022a52cc39f8e0027ac8ca8212 Mon Sep 17 00:00:00 2001 From: Tim Andersen Date: Fri, 9 Oct 2009 13:53:14 -0500 Subject: [PATCH] created PluginClasspathLoader to dynamically add jars in the plugins folder to the classpath at runtime (Lighthouse #63) --- plugins/testJar1.jar | 1 + plugins/testJar2.jar | 1 + .../components/PluginClasspathLoader.java | 29 ++++++++++++ .../components/PluginClasspathLoaderTest.java | 47 +++++++++++++++++++ 4 files changed, 78 insertions(+) create mode 100644 plugins/testJar1.jar create mode 100644 plugins/testJar2.jar create mode 100644 src/fitnesse/components/PluginClasspathLoader.java create mode 100644 src/fitnesse/components/PluginClasspathLoaderTest.java diff --git a/plugins/testJar1.jar b/plugins/testJar1.jar new file mode 100644 index 0000000000..c90c106470 --- /dev/null +++ b/plugins/testJar1.jar @@ -0,0 +1 @@ +not really a jar, just a file for the PluginsClasspathLoaderTest.java diff --git a/plugins/testJar2.jar b/plugins/testJar2.jar new file mode 100644 index 0000000000..c90c106470 --- /dev/null +++ b/plugins/testJar2.jar @@ -0,0 +1 @@ +not really a jar, just a file for the PluginsClasspathLoaderTest.java diff --git a/src/fitnesse/components/PluginClasspathLoader.java b/src/fitnesse/components/PluginClasspathLoader.java new file mode 100644 index 0000000000..a1514b3054 --- /dev/null +++ b/src/fitnesse/components/PluginClasspathLoader.java @@ -0,0 +1,29 @@ +package fitnesse.components; + +import java.io.File; + + +public class PluginClasspathLoader { + + private String pluginsDirecory = "./plugins"; + + public void addPluginsToClasspath() { + File pluginsDir = new File(pluginsDirecory); + File[] plugins = pluginsDir.listFiles(); + for (File plugin : plugins) { + if (plugin.getName().endsWith("jar")) { + System.setProperty("java.class.path", getClasspath() + getPathSeperator() + plugin.getAbsolutePath()); + } + } + } + + protected String getClasspath() { + return System.getProperty("java.class.path"); + } + + + protected String getPathSeperator() { + return System.getProperty("path.separator"); + } + +} diff --git a/src/fitnesse/components/PluginClasspathLoaderTest.java b/src/fitnesse/components/PluginClasspathLoaderTest.java new file mode 100644 index 0000000000..7f7952dafe --- /dev/null +++ b/src/fitnesse/components/PluginClasspathLoaderTest.java @@ -0,0 +1,47 @@ +package fitnesse.components; + +import static org.junit.Assert.*; +import org.junit.Before; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + + +public class PluginClasspathLoaderTest { + + private PluginClasspathLoader loader; + + @Before + public void setUp() throws Exception { + loader = new PluginClasspathLoader(); + } + + + @Test + public void loadClassPath() { + List jars = listOfJarsInClasspath(); + assertFalse(jars.contains("testJar1.jar")); + assertFalse(jars.contains("testJar2.jar")); + int originalJarCount = jars.size(); + + loader.addPluginsToClasspath(); + + List newListOfJars = listOfJarsInClasspath(); + assertEquals(originalJarCount + 2, newListOfJars.size()); + assertTrue(newListOfJars.contains("testJar1.jar")); + assertTrue(newListOfJars.contains("testJar2.jar")); + } + + private List listOfJarsInClasspath() { + List classpathElements = Arrays.asList(loader.getClasspath().split(loader.getPathSeperator())); + List jars = new ArrayList(); + for (String classpathElement : classpathElements) { + int slashPosition = classpathElement.lastIndexOf(System.getProperty("file.separator")); + String jarName = classpathElement.substring(slashPosition + 1); + jars.add(jarName); + } + return jars; + } +}