Browse Source

Already have a Launcher ion this version.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270177 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Donald 24 years ago
parent
commit
2a3e3d1d4b
2 changed files with 0 additions and 374 deletions
  1. +0
    -187
      proposal/myrmidon/src/main/org/apache/tools/ant/Launcher.java
  2. +0
    -187
      proposal/myrmidon/src/todo/org/apache/tools/ant/Launcher.java

+ 0
- 187
proposal/myrmidon/src/main/org/apache/tools/ant/Launcher.java View File

@@ -1,187 +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.tools.ant;

import java.io.File;
import java.io.FilenameFilter;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Properties;
import java.util.StringTokenizer;
import org.apache.myrmidon.api.TaskException;

/**
* This is the Ant command line front end to end. This front end works out where
* ant is installed and loads the ant libraries before starting Ant proper.
*
* @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
*/
public class Launcher
{

public static void main( String[] args )
throws TaskException
{
File antHome = null;
ClassLoader systemClassLoader = Launcher.class.getClassLoader();
if( systemClassLoader == null )
{
antHome = determineAntHome11();
}
else
{
antHome = determineAntHome( systemClassLoader );
}
if( antHome == null )
{
System.err.println( "Unable to determine ANT_HOME" );
System.exit( 1 );
}

System.out.println( "ANT_HOME is " + antHome );

// We now create the class loader with which we are going to launch ant
AntClassLoader antLoader = new AntClassLoader( systemClassLoader, false );

// need to find tools.jar
addToolsJar( antLoader );

// add everything in the lib directory to this classloader
File libDir = new File( antHome, "lib" );
addDirJars( antLoader, libDir );

File optionalDir = new File( antHome, "lib/optional" );
addDirJars( antLoader, optionalDir );

Properties launchProperties = new Properties();
launchProperties.put( "ant.home", antHome.getAbsolutePath() );

try
{
Class mainClass = antLoader.loadClass( "org.apache.tools.ant.Main" );
antLoader.initializeClass( mainClass );

final Class[] param = {Class.forName( "[Ljava.lang.String;" ),
Properties.class, ClassLoader.class};
final Method startMethod = mainClass.getMethod( "start", param );
final Object[] argument = {args, launchProperties, systemClassLoader};
startMethod.invoke( null, argument );
}
catch( Exception e )
{
System.out.println( "Exception running Ant: " + e.getClass().getName() + ": " + e.getMessage() );
e.printStackTrace();
}
}

private static void addDirJars( AntClassLoader classLoader, File jarDir )
throws TaskException
{
String[] fileList = jarDir.list(
new FilenameFilter()
{
public boolean accept( File dir, String name )
{
return name.endsWith( ".jar" );
}
} );

if( fileList != null )
{
for( int i = 0; i < fileList.length; ++i )
{
File jarFile = new File( jarDir, fileList[ i ] );
classLoader.addPathElement( jarFile.getAbsolutePath() );
}
}
}

private static void addToolsJar( AntClassLoader antLoader )
throws TaskException
{
String javaHome = System.getProperty( "java.home" );
if( javaHome.endsWith( "jre" ) )
{
javaHome = javaHome.substring( 0, javaHome.length() - 4 );
}
System.out.println( "Java home is " + javaHome );
File toolsJar = new File( javaHome, "lib/tools.jar" );
if( !toolsJar.exists() )
{
System.out.println( "Unable to find tools.jar at " + toolsJar.getPath() );
}
else
{
antLoader.addPathElement( toolsJar.getAbsolutePath() );
}
}

private static File determineAntHome( ClassLoader systemClassLoader )
{
try
{
String className = Launcher.class.getName().replace( '.', '/' ) + ".class";
URL classResource = systemClassLoader.getResource( className );
String fileComponent = classResource.getFile();
if( classResource.getProtocol().equals( "file" ) )
{
// Class comes from a directory of class files rather than
// from a jar.
int classFileIndex = fileComponent.lastIndexOf( className );
if( classFileIndex != -1 )
{
fileComponent = fileComponent.substring( 0, classFileIndex );
}
File classFilesDir = new File( fileComponent );
File buildDir = new File( classFilesDir.getParent() );
File devAntHome = new File( buildDir.getParent() );
return devAntHome;
}
else if( classResource.getProtocol().equals( "jar" ) )
{
// Class is coming from a jar. The file component of the URL
// is actually the URL of the jar file
int classSeparatorIndex = fileComponent.lastIndexOf( "!" );
if( classSeparatorIndex != -1 )
{
fileComponent = fileComponent.substring( 0, classSeparatorIndex );
}
URL antJarURL = new URL( fileComponent );
File antJarFile = new File( antJarURL.getFile() );
File libDirectory = new File( antJarFile.getParent() );
File antHome = new File( libDirectory.getParent() );
return antHome;
}
}
catch( MalformedURLException e )
{
e.printStackTrace();
}
return null;
}

private static File determineAntHome11()
{
String classpath = System.getProperty( "java.class.path" );
StringTokenizer tokenizer = new StringTokenizer( classpath, System.getProperty( "path.separator" ) );
while( tokenizer.hasMoreTokens() )
{
String path = tokenizer.nextToken();
if( path.endsWith( "ant.jar" ) )
{
File antJarFile = new File( path );
File libDirectory = new File( antJarFile.getParent() );
File antHome = new File( libDirectory.getParent() );
return antHome;
}
}
return null;
}
}


+ 0
- 187
proposal/myrmidon/src/todo/org/apache/tools/ant/Launcher.java View File

@@ -1,187 +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.tools.ant;

import java.io.File;
import java.io.FilenameFilter;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Properties;
import java.util.StringTokenizer;
import org.apache.myrmidon.api.TaskException;

/**
* This is the Ant command line front end to end. This front end works out where
* ant is installed and loads the ant libraries before starting Ant proper.
*
* @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
*/
public class Launcher
{

public static void main( String[] args )
throws TaskException
{
File antHome = null;
ClassLoader systemClassLoader = Launcher.class.getClassLoader();
if( systemClassLoader == null )
{
antHome = determineAntHome11();
}
else
{
antHome = determineAntHome( systemClassLoader );
}
if( antHome == null )
{
System.err.println( "Unable to determine ANT_HOME" );
System.exit( 1 );
}

System.out.println( "ANT_HOME is " + antHome );

// We now create the class loader with which we are going to launch ant
AntClassLoader antLoader = new AntClassLoader( systemClassLoader, false );

// need to find tools.jar
addToolsJar( antLoader );

// add everything in the lib directory to this classloader
File libDir = new File( antHome, "lib" );
addDirJars( antLoader, libDir );

File optionalDir = new File( antHome, "lib/optional" );
addDirJars( antLoader, optionalDir );

Properties launchProperties = new Properties();
launchProperties.put( "ant.home", antHome.getAbsolutePath() );

try
{
Class mainClass = antLoader.loadClass( "org.apache.tools.ant.Main" );
antLoader.initializeClass( mainClass );

final Class[] param = {Class.forName( "[Ljava.lang.String;" ),
Properties.class, ClassLoader.class};
final Method startMethod = mainClass.getMethod( "start", param );
final Object[] argument = {args, launchProperties, systemClassLoader};
startMethod.invoke( null, argument );
}
catch( Exception e )
{
System.out.println( "Exception running Ant: " + e.getClass().getName() + ": " + e.getMessage() );
e.printStackTrace();
}
}

private static void addDirJars( AntClassLoader classLoader, File jarDir )
throws TaskException
{
String[] fileList = jarDir.list(
new FilenameFilter()
{
public boolean accept( File dir, String name )
{
return name.endsWith( ".jar" );
}
} );

if( fileList != null )
{
for( int i = 0; i < fileList.length; ++i )
{
File jarFile = new File( jarDir, fileList[ i ] );
classLoader.addPathElement( jarFile.getAbsolutePath() );
}
}
}

private static void addToolsJar( AntClassLoader antLoader )
throws TaskException
{
String javaHome = System.getProperty( "java.home" );
if( javaHome.endsWith( "jre" ) )
{
javaHome = javaHome.substring( 0, javaHome.length() - 4 );
}
System.out.println( "Java home is " + javaHome );
File toolsJar = new File( javaHome, "lib/tools.jar" );
if( !toolsJar.exists() )
{
System.out.println( "Unable to find tools.jar at " + toolsJar.getPath() );
}
else
{
antLoader.addPathElement( toolsJar.getAbsolutePath() );
}
}

private static File determineAntHome( ClassLoader systemClassLoader )
{
try
{
String className = Launcher.class.getName().replace( '.', '/' ) + ".class";
URL classResource = systemClassLoader.getResource( className );
String fileComponent = classResource.getFile();
if( classResource.getProtocol().equals( "file" ) )
{
// Class comes from a directory of class files rather than
// from a jar.
int classFileIndex = fileComponent.lastIndexOf( className );
if( classFileIndex != -1 )
{
fileComponent = fileComponent.substring( 0, classFileIndex );
}
File classFilesDir = new File( fileComponent );
File buildDir = new File( classFilesDir.getParent() );
File devAntHome = new File( buildDir.getParent() );
return devAntHome;
}
else if( classResource.getProtocol().equals( "jar" ) )
{
// Class is coming from a jar. The file component of the URL
// is actually the URL of the jar file
int classSeparatorIndex = fileComponent.lastIndexOf( "!" );
if( classSeparatorIndex != -1 )
{
fileComponent = fileComponent.substring( 0, classSeparatorIndex );
}
URL antJarURL = new URL( fileComponent );
File antJarFile = new File( antJarURL.getFile() );
File libDirectory = new File( antJarFile.getParent() );
File antHome = new File( libDirectory.getParent() );
return antHome;
}
}
catch( MalformedURLException e )
{
e.printStackTrace();
}
return null;
}

private static File determineAntHome11()
{
String classpath = System.getProperty( "java.class.path" );
StringTokenizer tokenizer = new StringTokenizer( classpath, System.getProperty( "path.separator" ) );
while( tokenizer.hasMoreTokens() )
{
String path = tokenizer.nextToken();
if( path.endsWith( "ant.jar" ) )
{
File antJarFile = new File( path );
File libDirectory = new File( antJarFile.getParent() );
File antHome = new File( libDirectory.getParent() );
return antHome;
}
}
return null;
}
}


Loading…
Cancel
Save