Browse Source

Simplified Classloader management.

Assume all jar/zip files in lib path are sucked into runtime.
Assume that there is no difference between engine and client classes (mainly so as to make it easier to manage engine interaction via task registration et-al) without proliferating a billion jars.


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269072 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Donald 24 years ago
parent
commit
d678e492b9
2 changed files with 12 additions and 60 deletions
  1. +0
    -59
      proposal/myrmidon/src/java/org/apache/myrmidon/launcher/LauncherClassLoader.java
  2. +12
    -1
      proposal/myrmidon/src/java/org/apache/myrmidon/launcher/Main.java

+ 0
- 59
proposal/myrmidon/src/java/org/apache/myrmidon/launcher/LauncherClassLoader.java View File

@@ -1,59 +0,0 @@
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.myrmidon.launcher;

import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.StringTokenizer;

/**
* Basic classloader that allows addition of URLs at runtime.
* Used from Main.class to inject Classes into ClassLoader.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public final class LauncherClassLoader
extends URLClassLoader
{
/**
* Basic constructor.
*
* @param urls the Starting URLS
*/
public LauncherClassLoader( final URL[] urls )
{
super( urls );
}

/**
* Add a URL to classloader
*
* @param url the url
*/
public void addURL( final URL url )
{
super.addURL( url );
}

/**
* Add an array of URLs to classloader
*
* @param url the url
*/
/*
void addURLs( final URL[] urls )
{
for( int i = 0; i < urls.length; i++ )
{
addURL( urls[ i ] );
}
}
*/
}

+ 12
- 1
proposal/myrmidon/src/java/org/apache/myrmidon/launcher/Main.java View File

@@ -11,6 +11,7 @@ import java.io.File;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.net.URL; import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.StringTokenizer; import java.util.StringTokenizer;


@@ -41,12 +42,14 @@ public final class Main
final File libDir = new File( installDirectory, "lib" ); final File libDir = new File( installDirectory, "lib" );
final URL[] urls = buildURLList( libDir ); final URL[] urls = buildURLList( libDir );


final LauncherClassLoader classLoader = new LauncherClassLoader( urls );
final URLClassLoader classLoader = new URLClassLoader( urls );


//load class and retrieve appropriate main method. //load class and retrieve appropriate main method.
final Class clazz = classLoader.loadClass( "org.apache.myrmidon.Main" ); final Class clazz = classLoader.loadClass( "org.apache.myrmidon.Main" );
final Method method = clazz.getMethod( "main", new Class[] { args.getClass() } ); final Method method = clazz.getMethod( "main", new Class[] { args.getClass() } );


Thread.currentThread().setContextClassLoader( classLoader );

//kick the tires and light the fires.... //kick the tires and light the fires....
method.invoke( null, new Object[] { args } ); method.invoke( null, new Object[] { args } );
} }
@@ -80,6 +83,14 @@ public final class Main


if( !file.isFile() || !file.canRead() ) if( !file.isFile() || !file.canRead() )
{ {
//ignore non-files or unreadable files
continue;
}

final String name = file.getName();
if( !name.endsWith( ".jar" ) && !name.endsWith( ".zip" ) )
{
//Ifnore files in lib dir that are not jars or zips
continue; continue;
} }




Loading…
Cancel
Save