You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by tm...@apache.org on 2006/07/19 18:05:05 UTC

svn commit: r423507 - in /struts/struts2/trunk/core/src/main/java/org/apache/struts2/quickstart: Configuration.java JettyServer.java QuickStart.java

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);