Author: tmjee Date: Wed Jul 19 09:05:05 2006 New Revision: 423507 URL: http://svn.apache.org/viewvc?rev=423507&view=rev Log: WW-1387 backport form WW issue - Quickstart does not load classes from WEB-INF/classes first
Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/quickstart/Configuration.java struts/struts2/trunk/core/src/main/java/org/apache/struts2/quickstart/JettyServer.java struts/struts2/trunk/core/src/main/java/org/apache/struts2/quickstart/QuickStart.java Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/quickstart/Configuration.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/quickstart/Configuration.java?rev=423507&r1=423506&r2=423507&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/quickstart/Configuration.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/quickstart/Configuration.java Wed Jul 19 09:05:05 2006 @@ -132,36 +132,32 @@ public void resolveDirs(String wd) { if (ideaConfig != null) { - String[] parts = ideaConfig.split(","); - for (int i = 0; i < parts.length; i++) { - String full = resolveDir(parts[i], wd); - - try { - DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); - Document doc = db.parse(full); - NodeList components = doc.getElementsByTagName("root"); - List jars = new ArrayList(); - for (int j = 0; j < components.getLength(); j++) { - Element e = (Element) components.item(j); - String value = e.getAttribute("url"); - if (value != null && value.startsWith("jar://") && value.endsWith(".jar!/")) { - value = value.substring(6, value.length() - 2); - if (value.startsWith("$MODULE_DIR$")) { - value = value.substring(13); - } - jars.add(value); - } - } + String full = resolveDir(this.ideaConfig, wd); - if (this.libs != null) { - this.libs.addAll(jars); - } else { - this.libs = jars; + try { + DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + Document doc = db.parse(full); + NodeList components = doc.getElementsByTagName("root"); + List jars = new ArrayList(); + for (int i = 0; i < components.getLength(); i++) { + Element e = (Element) components.item(i); + String value = e.getAttribute("url"); + if (value != null && value.startsWith("jar://") && value.endsWith(".jar!/")) { + value = value.substring(6, value.length() - 2); + if (value.startsWith("$MODULE_DIR$")) { + value = value.substring(13); + } + jars.add(value); } - } catch (Exception e) { - e.printStackTrace(); } + if (this.libs != null) { + this.libs.addAll(jars); + } else { + this.libs = jars; + } + } catch (Exception e) { + e.printStackTrace(); } } resolve(this.libs, wd); @@ -175,6 +171,20 @@ String dir = mapping.getDir(); dir = resolveDir(dir, wd); + // if the ${dir}/WEB-INF/classes dir exists and isn't already added to the classDirs, let's do it + // ... but make sure we put it at the front (to obey the class loading behaviors) + File classDir = new File(dir, "WEB-INF/classes"); + if (classDir.exists()) { + String fullClassDir = getFullPath(classDir); + if (this.classDirs == null) { + this.classDirs = new ArrayList(); + } + + if (!classDirs.contains(fullClassDir)) { + classDirs.add(0, fullClassDir); + } + } + if (this.mappings == null) { this.mappings = new MultiHashMap(); this.pathPriority = new ArrayList(); @@ -202,6 +212,10 @@ file = new File(dir); } + return getFullPath(file); + } + + private String getFullPath(File file) { try { return file.getCanonicalPath(); } catch (IOException e) { Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/quickstart/JettyServer.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/quickstart/JettyServer.java?rev=423507&r1=423506&r2=423507&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/quickstart/JettyServer.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/quickstart/JettyServer.java Wed Jul 19 09:05:05 2006 @@ -23,11 +23,17 @@ import java.util.List; import java.util.Map; +import java.io.File; /** * To start a Jetty server used by the QuickStart application. */ public class JettyServer { + /** + * The system property name used to specify a directory of webapps. + */ + public static final String WEBAPPS_DIR_PROPERTY = "webapps.dir"; + public static void startServer(int port, String context, List pathPriority, Map paths, String resolver) throws Exception { try { Server server = new Server(); @@ -44,6 +50,12 @@ ctx.setClassLoader(Thread.currentThread().getContextClassLoader()); ctx.setContextPath(context); server.addContext(null, ctx); + + // Add in extra webapps dir (see WW-1387) + String webappsDir = System.getProperty(WEBAPPS_DIR_PROPERTY); + if (webappsDir != null && new File(webappsDir).exists()) { + server.addWebApplications(webappsDir); + } server.start(); } catch (Exception e) { Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/quickstart/QuickStart.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/quickstart/QuickStart.java?rev=423507&r1=423506&r2=423507&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/quickstart/QuickStart.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/quickstart/QuickStart.java Wed Jul 19 09:05:05 2006 @@ -102,41 +102,21 @@ return; } - - // ok, clean up the classpath crap - TreeSet finalLibs = new TreeSet(); - for (Iterator iterator = c.getLibs().iterator(); iterator.hasNext();) { - String s = (String) iterator.next(); - finalLibs.add(s); - } - TreeSet finalClasses = new TreeSet(); - for (Iterator iterator = c.getClassDirs().iterator(); iterator.hasNext();) { - String s = (String) iterator.next(); - finalClasses.add(s); - } - TreeSet finalSources = new TreeSet(); - if (c.getSources() != null) { - for (Iterator iterator = c.getSources().iterator(); iterator.hasNext();) { - String s = (String) iterator.next(); - finalSources.add(s); - } - } - // explain what is being executed System.out.println("Launching Jetty with the following configuration:"); System.out.println("Jars/Directory of jars:"); - for (Iterator iterator = finalLibs.iterator(); iterator.hasNext();) { + for (Iterator iterator = c.getLibs().iterator(); iterator.hasNext();) { String s = (String) iterator.next(); System.out.println(" " + s); } System.out.println("Directories of classes:"); - for (Iterator iterator = finalClasses.iterator(); iterator.hasNext();) { + for (Iterator iterator = c.getClassDirs().iterator(); iterator.hasNext();) { String s = (String) iterator.next(); System.out.println(" " + s); } - if (!finalSources.isEmpty()) { + if (c.getSources() != null) { System.out.println("Sources:"); - for (Iterator iterator = finalSources.iterator(); iterator.hasNext();) { + for (Iterator iterator = c.getSources().iterator(); iterator.hasNext();) { String s = (String) iterator.next(); System.out.println(" " + s); } @@ -150,12 +130,12 @@ // prepare the classloader List libs = c.getLibs(); List classDirs = c.getClassDirs(); - ClassLoader parent = new MultiDirClassLoader((String[]) finalLibs.toArray(new String[finalLibs.size()]), - (String[]) finalClasses.toArray(new String[finalClasses.size()]), + ClassLoader parent = new MultiDirClassLoader((String[]) libs.toArray(new String[libs.size()]), + (String[]) classDirs.toArray(new String[classDirs.size()]), Thread.currentThread().getContextClassLoader()); - if (!finalSources.isEmpty()) { - for (Iterator iterator = finalSources.iterator(); iterator.hasNext();) { + if (c.getSources() != null) { + for (Iterator iterator = c.getSources().iterator(); iterator.hasNext();) { String source = (String) iterator.next(); File file = new File(source); CompilingClassLoader ccl = new CompilingClassLoader(parent, file);