Index: stripes/src/net/sourceforge/stripes/util/ResolverUtil.java
===================================================================
--- stripes/src/net/sourceforge/stripes/util/ResolverUtil.java	(revision 1133)
+++ stripes/src/net/sourceforge/stripes/util/ResolverUtil.java	(working copy)
@@ -214,29 +214,34 @@
         }
 
         while (urls.hasMoreElements()) {
-            String urlPath = urls.nextElement().getFile();
-            urlPath = StringUtil.urlDecode(urlPath);
+            URL currentUrl = urls.nextElement();
+            if ("vfszip".equals(currentUrl.getProtocol())) {
+              loadImplementationsInStream(test, packageName, currentUrl);
+            } else {
+              String urlPath = currentUrl.getFile();
+              urlPath = StringUtil.urlDecode(urlPath);
 
             // If it's a file in a directory, trim the stupid file: spec
-            if ( urlPath.startsWith("file:") ) {
+              if ( urlPath.startsWith("file:") ) {
                 urlPath = urlPath.substring(5);
-            }
+              }
 
-            // Else it's in a JAR, grab the path to the jar
-            if (urlPath.indexOf('!') > 0) {
+              // Else it's in a JAR, grab the path to the jar
+              if (urlPath.indexOf('!') > 0) {
                 urlPath = urlPath.substring(0, urlPath.indexOf('!'));
-            }
+              }
 
-            log.info("Scanning for classes in [", urlPath, "] matching criteria: ", test);
-            File file = new File(urlPath);
-            if ( file.isDirectory() ) {
+              log.info("Scanning for classes in [", urlPath, "] matching criteria: ", test);
+              File file = new File(urlPath);
+              if ( file.isDirectory() ) {
                 loadImplementationsInDirectory(test, packageName, file);
-            }
-            else {
+              }
+              else {
                 loadImplementationsInJar(test, packageName, file);
+              }
             }
         }
-        
+
         return this;
     }
 
@@ -307,6 +312,33 @@
     }
 
     /**
+     * Finds matching classes within a jar stream.
+     *
+     * @param test a Test used to filter the classes that are discovered
+     * @param parent the parent package under which classes must be in order to be considered
+     * @param jarfile the jar file to be examined for classes
+     */
+    private void loadImplementationsInStream(Test test, String parent, URL jarUrl) {
+        try {
+            JarEntry entry;
+            java.io.InputStream stream = jarUrl.openStream();
+            JarInputStream jarStream = new JarInputStream(stream);
+
+            while ( (entry = jarStream.getNextJarEntry() ) != null) {
+                String name = entry.getName();
+                if (!entry.isDirectory() && name.endsWith(".class")) {
+                  log.trace("checking2 " + parent + "/" + name);
+                    addIfMatching(test, parent + "/" + name);
+                }
+            }
+        }
+        catch (IOException ioe) {
+            log.error("Could not search URL '", jarUrl, "' for classes matching criteria: ",
+                      test, "due to an IOException: ", ioe.getMessage());
+        }
+    }
+
+    /**
      * Add the class designated by the fully qualified class name provided to the set of
      * resolved classes if and only if it is approved by the Test supplied.
      *
@@ -330,4 +362,4 @@
                      t.getClass().getName(), " with message: ", t.getMessage());
         }
     }
-}
\ No newline at end of file
+}
Index: examples/build.xml
===================================================================
--- examples/build.xml	(revision 1133)
+++ examples/build.xml	(working copy)
@@ -12,7 +12,7 @@
   <property name="src.dir"     value="${basedir}/src"/>
   <property name="web.dir"     value="${basedir}/web"/>
   <property name="lib.dir"     value="${web.dir}/WEB-INF/lib"/>
-  <property name="classes.dir" value="${web.dir}/WEB-INF/classes"/>
+  <property name="classes.dir" value="${basedir}/classes"/>
   <property name="doc.dir"    value="${basedir}/docs"/>
   <property name="dist.dir"    value="${basedir}/dist"/>
  
@@ -62,9 +62,18 @@
   </target>
 
   <!-- =================================================================== -->
+  <!-- Jar up the classes directory to create the library file.            -->
+  <!-- =================================================================== -->
+  <target name="jar" depends="compile"
+          description="Builds the stripes.jar library file.">
+    <jar destfile="${lib.dir}/stripes-example.jar" basedir="${classes.dir}"/>
+  </target>
+
+
+  <!-- =================================================================== -->
   <!-- Creates a deployable WAR file for the examples app.                 -->
   <!-- =================================================================== -->
-  <target name="war" depends="compile"
+  <target name="war" depends="jar"
           description="Builds a deployable war file containing all the Stripes examples.">
       <copy todir="${web.dir}/WEB-INF/src" flatten="true" overwrite="true">
           <fileset dir="${src.dir}" includes="**/*.java"/>

