Douglas Ferguson <[EMAIL PROTECTED]> writes:
> Sure, I'd love to see that script.
import java.io.File;
import java.io.FileFilter;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class Lanceur implements Runnable {
private static final Log LOG = LogFactory.getLog(Lanceur.class);
/*
* the command line arguments array
*/
private String[] arguments;
/*
* the exit status
*
*/
private int status = 0;
/*
* class loader constructed by this lanceur
*/
private URLClassLoader loader;
public static void main(String[] argv) {
if(argv.length == 0)
System.exit(1);
/* first argument is real lanucher class */
String real = argv[0];
Class realC = Class.forName(real);
/* shift les arguments */
String[] nargs = new String[argv.length - 1];
if (nargs.length != 0) {
System.arraycopy(arguments, 1, nargs, 0, nargs.length);
}
Lanceur l = (Lanceur)realC.newInstance();
l.setArguments(argv);
l.run();
}
public void run() {
/* extraction du repertoire */
String libdir = System.getProperty("libdir","..\\lib");
if (libdir == null) {
LOG.error("Definir le repertoire contenant les
bibliotheques : -Dlibdir=<xxxxx>");
setStatus(1);
return;
}
/* verifications */
File f = new File(libdir);
if (!f.exists()) {
LOG.error("Le repertoire" + libdir + " n'existe pas");
setStatus(2);
return;
}
if (!f.isDirectory()) {
LOG.error(libdir + " n'est pas un repertoire");
setStatus(2);
return;
}
if (!f.canRead()) {
LOG.error("Le contenu de " + libdir + " ne peut etre
lu");
setStatus(2);
return;
}
/* extraction du nom de la classe principale */
String clname = System.getProperty("main","Main");
if (clname == null)
clname = "Main";
/* construction du classpath */
File[] jars = f.listFiles(new FileFilter() {
public boolean accept(File pathname) {
return pathname.getName().endsWith(".jar")
||
pathname.getName().endsWith(".zip");
}
});
int ln = jars.length;
URL[] urls = new URL[ln + 1];
/* ajout du repertoire courant par defaut*/
try {
urls[0] = new URL("file://.");
} catch (MalformedURLException e) {
LOG.error("Impossible d'ajouter . au classpath : "
+ e.getLocalizedMessage());
}
for (int i = 0; i < ln; i++)
try {
handleJar(jars[i]);
urls[i] = new URL("file://" +
jars[i].getPath());
} catch (MalformedURLException e) {
LOG.error("Impossible d'ajouter . au classpath
: "
+ e.getLocalizedMessage());
}
/* chargement */
loader = new URLClassLoader(urls,
ClassLoader.getSystemClassLoader());
try {
Class cls = loader.loadClass(clname);
Method main = cls.getDeclaredMethod("main", new Class[]
{ nargs
.getClass() });
LOG.debug("Execution de "+clname +".main(");
for(int i=0;i<arguments.length;i++) {
LOG.debug(arguments[i]);
if(i < arguments.length -1)
LOG.debug(','+"");
}
LOG.debug(")");
main.invoke(null, new Object[] { nargs });
} catch (ClassNotFoundException e) {
LOG.error("Impossible de trouver la classe " + clname
+ " : " + e.getLocalizedMessage());
setStatus(3);
} catch (SecurityException e) {
LOG.error("Erreur de securite pour charger la methode
main dans "
+ clname + " : " +
e.getLocalizedMessage());
setStatus(3);
} catch (NoSuchMethodException e) {
LOG.error("Impossible de trouver la methode main dans "
+ clname + " : " +
e.getLocalizedMessage());
setStatus(3);
} catch (IllegalArgumentException e) {
LOG.error("Argument incorrecte a l'execution de " +
clname
+ ".main() : " +
e.getLocalizedMessage());
e.printStackTrace();
setStatus(3);
} catch (IllegalAccessException e) {
LOG.error("Acces interdit a l'execution de " + clname
+ ".main() : " +
e.getLocalizedMessage());
setStatus(3);
} catch (InvocationTargetException e) {
setStatus(4);
e.printStackTrace();
}
}
/**
* This method may be used to do something with the
* content of each loaded jar file before they are put into
* the classpath.
*
* @param file the File object representing a jar or zip file.
*/
protected void handleJar(File file) {
// NOP
}
public String[] getArguments() {
return arguments;
}
public void setArguments(String[] arguments) {
this.arguments = arguments;
}
/**
* @return Returns the status.
*/
public int getStatus() {
return status;
}
/**
* @param status The status to set.
*/
public void setStatus(int status) {
this.status = status;
}
/**
* @return Returns the loader.
*/
public URLClassLoader getLoader() {
return loader;
}
/**
* @param loader The loader to set.
*/
public void setLoader(URLClassLoader loader) {
this.loader = loader;
}
}
--
OQube < software engineering \ génie logiciel >
Arnaud Bailly, Dr.
\web> http://www.oqube.com
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]