All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.struts2.Main Maven / Gradle / Ivy

There is a newer version: 2.5.33
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.apache.struts2;

import java.io.File;
import java.io.FilenameFilter;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 
 * 

* Struts comes with various related tools included in the struts-core-VERSION.jar file. You can access these * tools by simply unpacking the Struts distribution and running java -jar struts-core-VERSION.jar. * Struts will automatically include all jars in the same directory as the struts-core-VERSION.jar file as well as all * jars in the lib directory. This means you can invoke these tools either from within the standard directory * structure found in the Struts distribution, or from within your WEB-INF/lib directory. *

* *

You can access the help information for these tools by simply running the jar without any arguments.

* * * @deprecated */ @Deprecated public class Main { public static void main(String[] args) { if (args.length == 0) { System.out.println("Usage:"); System.out.println(" java -jar struts-toolbox.jar [command] (optional command args)"); System.out.println(""); System.out.println("Where [command] is one of the following:"); System.out.println(" sitegraph"); System.out.println(" sitegraph:xxx"); System.out.println(""); System.out.println("Execute the commands for additional usage instructions."); System.out.println("Note: the *:xxx commands are just shortcuts for "); System.out.println(" running the command on a webapp in the apps dir."); return; } String javaHome = System.getProperty("java.home"); ArrayList urls = new ArrayList(); try { findJars(new File("lib"), urls); // use all the jars in the current that aren't the src jar File wd = new File("."); File[] jars = wd.listFiles(new FilenameFilter() { public boolean accept(File dir, String name) { return name.endsWith(".jar") && !name.contains("-src."); } }); for (File jar : jars) { urls.add(jar.toURL()); } // ... but there might not be any (ie: we're in development in IDEA), so use this as backup urls.add(new File(System.getProperty("struts.classes", "build/java")).toURL()); urls.add(new File(System.getProperty("xwork.classes", "../xwork/build/java/")).toURL()); // load tools.jar from JAVA_HOME File tools = new File(javaHome, "lib/tools.jar"); if (!tools.exists()) { // hmm, not there, how about java.home? tools = new File(javaHome, "../lib/tools.jar"); } if (!tools.exists()) { // try the OS X common path tools = new File(javaHome, "../Classes/classes.jar"); } if (!tools.exists()) { // try the other OS X common path tools = new File(javaHome, "../Classes/classes.jar"); } if (!tools.exists()) { // did the user specify it by hand? String prop = System.getProperty("tools"); if (prop != null) { tools = new File(prop); } } if (!tools.exists()) { System.out.println("Error: Could not find tools.jar! Please do one of the following: "); System.out.println(""); System.out.println(" - Use the JDK's JVM (ie: c:\\jdk1.5.0\\bin\\java)"); System.out.println(" - Specify JAVA_HOME to point to your JDK 1.5 home"); System.out.println(" - Specify a direct path to tools.jar via, as shown below:"); System.out.println(""); System.out.println(" java -Dtools=/path/to/tools.jar -jar struts.jar ..."); return; } // finally, add the verified tools.jar urls.add(tools.toURL()); } catch (MalformedURLException e) { e.printStackTrace(); System.out.println("Could not find URLs -- see stack trace."); } String command = args[0]; String[] programArgs = new String[args.length - 1]; System.arraycopy(args, 1, programArgs, 0, programArgs.length); if (command.startsWith("sitegraph:")) { command = "sitegraph"; String name = checkWebAppArgs(args); programArgs = new String[]{"-config", "apps/" + name + "/src/webapp/WEB-INF/classes", "-views", "apps/" + name + "/src/webapp", "-output", "."}; } if ("sitegraph".equals(command)) { launch("org.apache.struts2.sitegraph.SiteGraph", programArgs, urls); } } private static String checkWebAppArgs(String[] args) { int colon = args[0].indexOf(':'); String name = null; try { name = args[0].substring(colon + 1); } catch (Exception e) { //this is OK to skip } if (name == null || name.equals("")) { System.out.println("Error: you must specify the webapp you wish"); System.out.println(" to deploy. The webapp name must be the"); System.out.println(" name of the directory found in apps/."); System.out.println(""); System.out.println("Example: java -jar struts-core-VERSION.jar quickstart:sandbox"); System.exit(1); } return name; } private static void launch(String program, String[] programArgs, List urls) { Collections.reverse(urls); URL[] urlArray = urls.toArray(new URL[urls.size()]); URLClassLoader cl = new MainClassLoader(urlArray); Thread.currentThread().setContextClassLoader(cl); try { Class clazz = cl.loadClass(program); Method main = clazz.getDeclaredMethod("main", new Class[]{String[].class}); main.invoke(null, new Object[]{programArgs}); } catch (Exception e) { e.printStackTrace(); } } private static void findJars(File file, ArrayList urls) throws MalformedURLException { File[] files = file.listFiles(); if (files == null) { return; } for (File f : files) { if (f.isDirectory()) { findJars(f, urls); } else if (f.getName().endsWith(".jar")) { if (isValid(f.getName())) { urls.add(f.toURL()); } } } } private static boolean isValid(String name) { return !"dom.jar".equals(name); } /** * Reverses the typical order of classloading to defer only to the parent if the current class loader can't be * found. This is required to allow for the launcher to be embedded within struts.jar (otherwise the dependencies * wouldn't be found by the system ClassLoader when invoking using "java -jar struts-core-VERSION.jar ..."). */ public static class MainClassLoader extends URLClassLoader { public MainClassLoader(URL[] urls) { super(urls); } public Class loadClass(String name, boolean resolve) throws ClassNotFoundException { if (name.startsWith("org.xml.") || name.startsWith("org.w3c.") || name.startsWith("java.") || name.startsWith("javax.") || name.startsWith("sun.") || name.startsWith("com.sun.")) { return super.loadClass(name, resolve); } ClassLoader parent = getParent(); // First, check if the class has already been loaded Class c = findLoadedClass(name); if (c == null) { try { c = findClass(name); } catch (Throwable t) { // If still not found, only then ask the parent c = parent.loadClass(name); } } if (resolve) { resolveClass(c); } return c; } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy