allow from system if possible where bundle not known

for use if switching to a pojo environment
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/ClassLoaderUtils.java b/core/src/main/java/org/apache/brooklyn/util/core/ClassLoaderUtils.java
index fc7e9bf..ce127c9 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/ClassLoaderUtils.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/ClassLoaderUtils.java
@@ -380,7 +380,11 @@
                             .reduce((v1, v2) -> v2));
                 }
                 if (bundle.isAbsent()) {
-                    throw new IllegalStateException("Bundle " + toBundleString(symbolicName, version)+ " not found to load.");
+                    // fall back to loading from system classpath, if running as pojo
+                    Maybe<T> result = dispatcher.tryLoadFrom(classLoader, name);
+                    if (result.isAbsent()) {
+                        throw new IllegalStateException("Bundle " + toBundleString(symbolicName, version) + " not found to load.");
+                    }
                 }
             }
             return dispatcher.tryLoadFrom(bundle.get(), name);
diff --git a/core/src/test/java/org/apache/brooklyn/util/core/ClassLoaderUtilsTest.java b/core/src/test/java/org/apache/brooklyn/util/core/ClassLoaderUtilsTest.java
index efa0aea..7b6df6d 100644
--- a/core/src/test/java/org/apache/brooklyn/util/core/ClassLoaderUtilsTest.java
+++ b/core/src/test/java/org/apache/brooklyn/util/core/ClassLoaderUtilsTest.java
@@ -308,23 +308,23 @@
             new ClassLoaderUtils(this, mgmt).loadClass(
                     "org.apache.brooklyn.api",
                     "100.100.100-alpha-version_wth.tags",
-                    Entity.class.getName());
+                    "org.apache.brooklyn.NonExistentClass");  // actual classes may be found on the classpath
             Asserts.shouldHaveFailedPreviously();
         } catch (Exception e) {
             IllegalStateException nested = Exceptions.getFirstThrowableOfType(e, IllegalStateException.class);
             assertNotNull(nested);
-            Asserts.expectedFailureContains(nested, "not found to load");
+            Asserts.expectedFailureContains(nested, "not found to load", "org.apache.brooklyn.api", "100.100.100");
         }
         try {
             new ClassLoaderUtils(this, mgmt).loadClass(
                     "org.apache.brooklyn.api",
                     "100.100.100-SNAPSHOT",
-                    Entity.class.getName());
+                    "org.apache.brooklyn.NonExistentClass");  // actual classes may be found on the classpath
             Asserts.shouldHaveFailedPreviously();
         } catch (Exception e) {
             IllegalStateException nested = Exceptions.getFirstThrowableOfType(e, IllegalStateException.class);
             assertNotNull(nested);
-            Asserts.expectedFailureContains(nested, "not found to load");
+            Asserts.expectedFailureContains(nested, "not found to load", "org.apache.brooklyn.api", "100.100.100");
         }
     }