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