* Added a String -> Path converter. * Added the appropriate declarations to ant1-ant-descriptor.xml. * PathLocation is now only used internally by Path. This means a <path> may not contain nested <pathlocation> elements any more. Nested <path> elements can be used to do the same thing. * Removed Path.systemClasspath and Path.concatSystemClassPath(). The goal is to add specialised <systemclasspath>, <antruntime>, and <javaruntime> data-types to control this explicitly. I left it unfinished, because the as-yet-unwritten Java util stuff will determine how it should be done. * Moved Path.addExtdirs() -> DefaultCompilerAdaptor. This was the only place it was used. * Cleaned out a few more Path createX() methods. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270786 13f79535-47bb-0310-9956-ffa450edef68master
@@ -387,14 +387,12 @@ Legal: | |||||
</zipfileset> | </zipfileset> | ||||
</jar> | </jar> | ||||
<!-- | |||||
<jar jarfile="${build.lib}/ant1.atl" basedir="${build.classes}"> | <jar jarfile="${build.lib}/ant1.atl" basedir="${build.classes}"> | ||||
<include name="org/apache/antlib/ant1/**"/> | <include name="org/apache/antlib/ant1/**"/> | ||||
<zipfileset dir="${manifest.dir}" fullpath="META-INF/ant-descriptor.xml"> | <zipfileset dir="${manifest.dir}" fullpath="META-INF/ant-descriptor.xml"> | ||||
<include name="ant1-ant-descriptor.xml"/> | <include name="ant1-ant-descriptor.xml"/> | ||||
</zipfileset> | </zipfileset> | ||||
</jar> | </jar> | ||||
--> | |||||
</target> | </target> | ||||
@@ -14,10 +14,12 @@ import java.io.PrintWriter; | |||||
import org.apache.avalon.excalibur.util.StringUtil; | import org.apache.avalon.excalibur.util.StringUtil; | ||||
import org.apache.avalon.framework.logger.AbstractLogEnabled; | import org.apache.avalon.framework.logger.AbstractLogEnabled; | ||||
import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
import org.apache.myrmidon.api.TaskContext; | |||||
import org.apache.tools.ant.taskdefs.Javac; | import org.apache.tools.ant.taskdefs.Javac; | ||||
import org.apache.tools.ant.taskdefs.exec.Execute2; | import org.apache.tools.ant.taskdefs.exec.Execute2; | ||||
import org.apache.tools.ant.types.Commandline; | import org.apache.tools.ant.types.Commandline; | ||||
import org.apache.tools.ant.types.Path; | import org.apache.tools.ant.types.Path; | ||||
import org.apache.tools.ant.types.FileSet; | |||||
/** | /** | ||||
* This is the default implementation for the CompilerAdapter interface. | * This is the default implementation for the CompilerAdapter interface. | ||||
@@ -77,8 +79,6 @@ public abstract class DefaultCompilerAdapter | |||||
m_compileList = attributes.getFileList(); | m_compileList = attributes.getFileList(); | ||||
m_compileClasspath = attributes.getClasspath(); | m_compileClasspath = attributes.getClasspath(); | ||||
m_baseDir = attributes.getBaseDirectory(); | m_baseDir = attributes.getBaseDirectory(); | ||||
m_includeAntRuntime = attributes.getIncludeantruntime(); | |||||
m_includeJavaRuntime = attributes.getIncludejavaruntime(); | |||||
m_memoryInitialSize = attributes.getMemoryInitialSize(); | m_memoryInitialSize = attributes.getMemoryInitialSize(); | ||||
m_memoryMaximumSize = attributes.getMemoryMaximumSize(); | m_memoryMaximumSize = attributes.getMemoryMaximumSize(); | ||||
} | } | ||||
@@ -283,34 +283,13 @@ public abstract class DefaultCompilerAdapter | |||||
if( m_destDir != null ) | if( m_destDir != null ) | ||||
{ | { | ||||
classpath.setLocation( m_destDir ); | |||||
classpath.addLocation( m_destDir ); | |||||
} | } | ||||
// Combine the build classpath with the system classpath, in an | |||||
// order determined by the value of build.classpath | |||||
if( m_compileClasspath == null ) | |||||
// add the classpath | |||||
if ( m_compileClasspath != null ) | |||||
{ | { | ||||
if( m_includeAntRuntime ) | |||||
{ | |||||
classpath.addExisting( Path.systemClasspath ); | |||||
} | |||||
} | |||||
else | |||||
{ | |||||
if( m_includeAntRuntime ) | |||||
{ | |||||
classpath.addExisting( m_compileClasspath.concatSystemClasspath( "last" ) ); | |||||
} | |||||
else | |||||
{ | |||||
classpath.addExisting( m_compileClasspath.concatSystemClasspath( "ignore" ) ); | |||||
} | |||||
} | |||||
if( m_includeJavaRuntime ) | |||||
{ | |||||
classpath.addJavaRuntime(); | |||||
classpath.addExisting( m_compileClasspath ); | |||||
} | } | ||||
return classpath; | return classpath; | ||||
@@ -437,5 +416,41 @@ public abstract class DefaultCompilerAdapter | |||||
getLogger().debug( niceSourceList.toString() ); | getLogger().debug( niceSourceList.toString() ); | ||||
} | } | ||||
/** | |||||
* Emulation of extdirs feature in java >= 1.2. This method adds all files | |||||
* in the given directories (but not in sub-directories!) to the classpath, | |||||
* so that you don't have to specify them all one by one. | |||||
*/ | |||||
protected void addExtdirs( Path path ) | |||||
throws TaskException | |||||
{ | |||||
if( m_extdirs == null ) | |||||
{ | |||||
String extProp = System.getProperty( "java.ext.dirs" ); | |||||
if( extProp != null ) | |||||
{ | |||||
m_extdirs = new Path( extProp ); | |||||
} | |||||
else | |||||
{ | |||||
return; | |||||
} | |||||
} | |||||
final String[] dirs = m_extdirs.list(); | |||||
for( int i = 0; i < dirs.length; i++ ) | |||||
{ | |||||
final File dir = new File( dirs[ i ] ); | |||||
if( dir.exists() && dir.isDirectory() ) | |||||
{ | |||||
final FileSet fileSet = new FileSet(); | |||||
fileSet.setDir( dir ); | |||||
fileSet.setIncludes( "*" ); | |||||
path.addFileset( fileSet ); | |||||
} | |||||
} | |||||
} | |||||
} | } | ||||
@@ -55,7 +55,7 @@ public class Gcj extends DefaultCompilerAdapter | |||||
// gcj doesn't support an extension dir (-extdir) | // gcj doesn't support an extension dir (-extdir) | ||||
// so we'll emulate it for compatibility and convenience. | // so we'll emulate it for compatibility and convenience. | ||||
classpath.addExtdirs( m_extdirs ); | |||||
addExtdirs( classpath ); | |||||
if( ( m_bootclasspath == null ) || ( m_bootclasspath.size() == 0 ) ) | if( ( m_bootclasspath == null ) || ( m_bootclasspath.size() == 0 ) ) | ||||
{ | { | ||||
@@ -52,7 +52,7 @@ public class Jikes | |||||
// Jikes doesn't support an extension dir (-extdir) | // Jikes doesn't support an extension dir (-extdir) | ||||
// so we'll emulate it for compatibility and convenience. | // so we'll emulate it for compatibility and convenience. | ||||
classpath.addExtdirs( m_extdirs ); | |||||
addExtdirs( classpath ); | |||||
if( ( m_bootclasspath == null ) || ( m_bootclasspath.size() == 0 ) ) | if( ( m_bootclasspath == null ) || ( m_bootclasspath.size() == 0 ) ) | ||||
{ | { | ||||
@@ -40,7 +40,7 @@ public class Jvc extends DefaultCompilerAdapter | |||||
// jvc doesn't support an extension dir (-extdir) | // jvc doesn't support an extension dir (-extdir) | ||||
// so we'll emulate it for compatibility and convenience. | // so we'll emulate it for compatibility and convenience. | ||||
classpath.addExtdirs( m_extdirs ); | |||||
addExtdirs( classpath ); | |||||
if( ( m_bootclasspath == null ) || ( m_bootclasspath.size() == 0 ) ) | if( ( m_bootclasspath == null ) || ( m_bootclasspath.size() == 0 ) ) | ||||
{ | { | ||||
@@ -94,7 +94,7 @@ public class Kjc extends DefaultCompilerAdapter | |||||
if( m_extdirs != null ) | if( m_extdirs != null ) | ||||
{ | { | ||||
cp.addExtdirs( m_extdirs ); | |||||
addExtdirs( cp ); | |||||
} | } | ||||
cp.append( classpath ); | cp.append( classpath ); | ||||
@@ -559,14 +559,16 @@ public class Javadoc | |||||
cmd.setExecutable( getJavadocExecutableName() ); | cmd.setExecutable( getJavadocExecutableName() ); | ||||
// ------------------------------------------------ general javadoc arguments | // ------------------------------------------------ general javadoc arguments | ||||
if( m_classpath == null ) | |||||
m_classpath = Path.systemClasspath; | |||||
else | |||||
m_classpath = m_classpath.concatSystemClasspath( "ignore" ); | |||||
// Build the classpath to pass to Javadoc | |||||
Path classpath = new Path(); | |||||
classpath.addPath( m_sourcePath ); | |||||
if ( m_classpath != null ) | |||||
{ | |||||
classpath.addPath( m_classpath ); | |||||
} | |||||
cmd.createArgument().setValue( "-classpath" ); | cmd.createArgument().setValue( "-classpath" ); | ||||
cmd.createArgument().setValue( m_sourcePath.toString() + | |||||
System.getProperty( "path.separator" ) + m_classpath.toString() ); | |||||
cmd.createArgument().setValue( classpath.toString() ); | |||||
if( m_version && m_doclet == null ) | if( m_version && m_doclet == null ) | ||||
cmd.createArgument().setValue( "-version" ); | cmd.createArgument().setValue( "-version" ); | ||||
@@ -14,6 +14,7 @@ import java.util.StringTokenizer; | |||||
import org.apache.avalon.excalibur.util.StringUtil; | import org.apache.avalon.excalibur.util.StringUtil; | ||||
import org.apache.avalon.framework.logger.AbstractLogEnabled; | import org.apache.avalon.framework.logger.AbstractLogEnabled; | ||||
import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
import org.apache.myrmidon.api.AbstractTask; | |||||
import org.apache.tools.ant.types.Commandline; | import org.apache.tools.ant.types.Commandline; | ||||
import org.apache.tools.ant.types.Path; | import org.apache.tools.ant.types.Path; | ||||
@@ -52,7 +53,7 @@ import org.apache.tools.ant.types.Path; | |||||
*/ | */ | ||||
public class Javah | public class Javah | ||||
extends AbstractLogEnabled | |||||
extends AbstractTask | |||||
{ | { | ||||
private final static String FAIL_MSG = "Compile failed, messages should have been provided."; | private final static String FAIL_MSG = "Compile failed, messages should have been provided."; | ||||
@@ -67,8 +68,10 @@ public class Javah | |||||
private String m_cls; | private String m_cls; | ||||
private File m_destDir; | private File m_destDir; | ||||
public void setBootclasspath( final Path bootclasspath ) | |||||
throws TaskException | |||||
/** | |||||
* Adds an element to the bootclasspath. | |||||
*/ | |||||
public void addBootclasspath( final Path bootclasspath ) | |||||
{ | { | ||||
if( m_bootclasspath == null ) | if( m_bootclasspath == null ) | ||||
{ | { | ||||
@@ -76,7 +79,7 @@ public class Javah | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
m_bootclasspath.append( bootclasspath ); | |||||
m_bootclasspath.addPath( bootclasspath ); | |||||
} | } | ||||
} | } | ||||
@@ -85,7 +88,10 @@ public class Javah | |||||
m_cls = cls; | m_cls = cls; | ||||
} | } | ||||
public void setClasspath( final Path classpath ) | |||||
/** | |||||
* Adds an element to the classpath. | |||||
*/ | |||||
public void addClasspath( final Path classpath ) | |||||
throws TaskException | throws TaskException | ||||
{ | { | ||||
if( m_classpath == null ) | if( m_classpath == null ) | ||||
@@ -94,7 +100,7 @@ public class Javah | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
m_classpath.append( classpath ); | |||||
m_classpath.addPath( classpath ); | |||||
} | } | ||||
} | } | ||||
@@ -149,18 +155,6 @@ public class Javah | |||||
m_verbose = verbose; | m_verbose = verbose; | ||||
} | } | ||||
public Path createBootclasspath() | |||||
{ | |||||
if( m_bootclasspath == null ) | |||||
{ | |||||
m_bootclasspath = new Path(); | |||||
} | |||||
Path path1 = m_bootclasspath; | |||||
final Path path = new Path(); | |||||
path1.addPath( path ); | |||||
return path; | |||||
} | |||||
public ClassArgument createClass() | public ClassArgument createClass() | ||||
{ | { | ||||
final ClassArgument ga = new ClassArgument(); | final ClassArgument ga = new ClassArgument(); | ||||
@@ -169,18 +163,6 @@ public class Javah | |||||
return ga; | return ga; | ||||
} | } | ||||
public Path createClasspath() | |||||
{ | |||||
if( m_classpath == null ) | |||||
{ | |||||
m_classpath = new Path(); | |||||
} | |||||
Path path1 = m_classpath; | |||||
final Path path = new Path(); | |||||
path1.addPath( path ); | |||||
return path; | |||||
} | |||||
/** | /** | ||||
* Executes the task. | * Executes the task. | ||||
*/ | */ | ||||
@@ -188,12 +170,6 @@ public class Javah | |||||
throws TaskException | throws TaskException | ||||
{ | { | ||||
validate(); | validate(); | ||||
if( m_classpath == null ) | |||||
{ | |||||
m_classpath = Path.systemClasspath; | |||||
} | |||||
doClassicCompile(); | doClassicCompile(); | ||||
} | } | ||||
@@ -215,7 +215,8 @@ public class BorlandGenerateClient extends Task | |||||
//classpath | //classpath | ||||
//add at the end of the classpath | //add at the end of the classpath | ||||
//the system classpath in order to find the tools.jar file | //the system classpath in order to find the tools.jar file | ||||
execTask.addClasspath( classpath.concatSystemClasspath() ); | |||||
// TODO - make sure tools.jar is in the classpath | |||||
//execTask.addClasspath( classpath.concatSystemClasspath( "last" ) ); | |||||
execTask.setFork( true ); | execTask.setFork( true ); | ||||
execTask.createArg().setValue( "generateclient" ); | execTask.createArg().setValue( "generateclient" ); | ||||
@@ -197,22 +197,6 @@ public class IPlanetEjbcTask extends Task | |||||
executeEjbc( getParser() ); | executeEjbc( getParser() ); | ||||
} | } | ||||
/** | |||||
* Returns the CLASSPATH to be used when calling EJBc. If no user CLASSPATH | |||||
* is specified, the System classpath is returned instead. | |||||
* | |||||
* @return Path The classpath to be used for EJBc. | |||||
*/ | |||||
private Path getClasspath() | |||||
{ | |||||
if( classpath == null ) | |||||
{ | |||||
classpath = Path.systemClasspath; | |||||
} | |||||
return classpath; | |||||
} | |||||
/** | /** | ||||
* Returns a SAXParser that may be used to process the XML descriptors. | * Returns a SAXParser that may be used to process the XML descriptors. | ||||
* | * | ||||
@@ -311,10 +295,16 @@ public class IPlanetEjbcTask extends Task | |||||
private void executeEjbc( SAXParser saxParser ) | private void executeEjbc( SAXParser saxParser ) | ||||
throws TaskException | throws TaskException | ||||
{ | { | ||||
String classpath = null; | |||||
if( classpath != null ) | |||||
{ | |||||
classpath = this.classpath.toString(); | |||||
} | |||||
IPlanetEjbc ejbc = new IPlanetEjbc( ejbdescriptor, | IPlanetEjbc ejbc = new IPlanetEjbc( ejbdescriptor, | ||||
iasdescriptor, | iasdescriptor, | ||||
dest, | dest, | ||||
getClasspath().toString(), | |||||
classpath, | |||||
saxParser ); | saxParser ); | ||||
ejbc.setRetainSource( keepgenerated ); | ejbc.setRetainSource( keepgenerated ); | ||||
ejbc.setDebugOutput( debug ); | ejbc.setDebugOutput( debug ); | ||||
@@ -17,7 +17,6 @@ import org.apache.tools.ant.taskdefs.exec.Execute2; | |||||
import org.apache.tools.ant.types.Argument; | import org.apache.tools.ant.types.Argument; | ||||
import org.apache.tools.ant.types.CommandlineJava; | import org.apache.tools.ant.types.CommandlineJava; | ||||
import org.apache.tools.ant.types.Path; | import org.apache.tools.ant.types.Path; | ||||
import org.apache.tools.ant.types.PathElement; | |||||
/** | /** | ||||
* Taskdef for the JJTree compiler compiler. | * Taskdef for the JJTree compiler compiler. | ||||
@@ -175,10 +174,7 @@ public class JJTree extends Task | |||||
throw new TaskException( "Javacchome not set." ); | throw new TaskException( "Javacchome not set." ); | ||||
} | } | ||||
final Path classpath = cmdl.createClasspath(); | final Path classpath = cmdl.createClasspath(); | ||||
final PathElement pathElement = new PathElement(); | |||||
classpath.addPathElement( pathElement ); | |||||
pathElement.setPath( javaccHome.getAbsolutePath() + | |||||
"/JavaCC.zip" ); | |||||
classpath.addLocation( new File( javaccHome, "JavaCC.zip" ) ); | |||||
classpath.addJavaRuntime(); | classpath.addJavaRuntime(); | ||||
final Argument arg = cmdl.createVmArgument(); | final Argument arg = cmdl.createVmArgument(); | ||||
@@ -18,7 +18,6 @@ import org.apache.tools.ant.types.Argument; | |||||
import org.apache.tools.ant.types.Commandline; | import org.apache.tools.ant.types.Commandline; | ||||
import org.apache.tools.ant.types.CommandlineJava; | import org.apache.tools.ant.types.CommandlineJava; | ||||
import org.apache.tools.ant.types.Path; | import org.apache.tools.ant.types.Path; | ||||
import org.apache.tools.ant.types.PathElement; | |||||
import org.apache.avalon.excalibur.util.StringUtil; | import org.apache.avalon.excalibur.util.StringUtil; | ||||
/** | /** | ||||
@@ -229,10 +228,7 @@ public class JavaCC extends Task | |||||
throw new TaskException( "Javacchome not set." ); | throw new TaskException( "Javacchome not set." ); | ||||
} | } | ||||
final Path classpath = cmdl.createClasspath(); | final Path classpath = cmdl.createClasspath(); | ||||
final PathElement pathElement = new PathElement(); | |||||
classpath.addPathElement( pathElement ); | |||||
pathElement.setPath( javaccHome.getAbsolutePath() + | |||||
"/JavaCC.zip" ); | |||||
classpath.addLocation( new File( javaccHome, "JavaCC.zip" ) ); | |||||
classpath.addJavaRuntime(); | classpath.addJavaRuntime(); | ||||
final Argument arg = cmdl.createVmArgument(); | final Argument arg = cmdl.createVmArgument(); | ||||
@@ -163,7 +163,9 @@ public class WLJspc extends MatchingTask | |||||
compileClasspath = new Path(); | compileClasspath = new Path(); | ||||
} | } | ||||
compileClasspath.append( Path.systemClasspath ); | |||||
// TODO - make sure tools.jar ends up in the classpath | |||||
//compileClasspath.append( Path.systemClasspath ); | |||||
String[] files = ds.getIncludedFiles(); | String[] files = ds.getIncludedFiles(); | ||||
//Weblogic.jspc calls System.exit() ... have to fork | //Weblogic.jspc calls System.exit() ... have to fork | ||||
@@ -463,14 +463,14 @@ public class JUnitTask extends Task | |||||
int pling = u.indexOf( "!" ); | int pling = u.indexOf( "!" ); | ||||
String jarName = u.substring( 9, pling ); | String jarName = u.substring( 9, pling ); | ||||
getLogger().debug( "Implicitly adding " + jarName + " to classpath" ); | getLogger().debug( "Implicitly adding " + jarName + " to classpath" ); | ||||
createClasspath().setLocation( new File( ( new File( jarName ) ).getAbsolutePath() ) ); | |||||
createClasspath().addLocation( new File( jarName ) ); | |||||
} | } | ||||
else if( u.startsWith( "file:" ) ) | else if( u.startsWith( "file:" ) ) | ||||
{ | { | ||||
int tail = u.indexOf( resource ); | int tail = u.indexOf( resource ); | ||||
String dirName = u.substring( 5, tail ); | String dirName = u.substring( 5, tail ); | ||||
getLogger().debug( "Implicitly adding " + dirName + " to classpath" ); | getLogger().debug( "Implicitly adding " + dirName + " to classpath" ); | ||||
createClasspath().setLocation( new File( ( new File( dirName ) ).getAbsolutePath() ) ); | |||||
createClasspath().addLocation( new File( dirName ) ); | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
@@ -23,7 +23,6 @@ import org.apache.tools.ant.types.Argument; | |||||
import org.apache.tools.ant.types.CommandlineJava; | import org.apache.tools.ant.types.CommandlineJava; | ||||
import org.apache.tools.ant.types.FileSet; | import org.apache.tools.ant.types.FileSet; | ||||
import org.apache.tools.ant.types.Path; | import org.apache.tools.ant.types.Path; | ||||
import org.apache.tools.ant.types.PathElement; | |||||
/** | /** | ||||
* Somewhat abstract framework to be used for other metama 2.0 tasks. This | * Somewhat abstract framework to be used for other metama 2.0 tasks. This | ||||
@@ -198,9 +197,7 @@ public abstract class AbstractMetamataTask | |||||
// set the classpath as the jar file | // set the classpath as the jar file | ||||
File jar = getMetamataJar( m_metamataHome ); | File jar = getMetamataJar( m_metamataHome ); | ||||
final Path classPath = m_cmdl.createClasspath(); | final Path classPath = m_cmdl.createClasspath(); | ||||
final PathElement pathElement = new PathElement(); | |||||
classPath.addPathElement( pathElement ); | |||||
pathElement.setLocation( jar ); | |||||
classPath.addLocation( jar ); | |||||
// set the metamata.home property | // set the metamata.home property | ||||
final Argument vmArgs = m_cmdl.createVmArgument(); | final Argument vmArgs = m_cmdl.createVmArgument(); | ||||
@@ -19,7 +19,6 @@ import org.apache.tools.ant.taskdefs.exec.Execute2; | |||||
import org.apache.tools.ant.types.Argument; | import org.apache.tools.ant.types.Argument; | ||||
import org.apache.tools.ant.types.CommandlineJava; | import org.apache.tools.ant.types.CommandlineJava; | ||||
import org.apache.tools.ant.types.Path; | import org.apache.tools.ant.types.Path; | ||||
import org.apache.tools.ant.types.PathElement; | |||||
/** | /** | ||||
* Simple Metamata MParse task based on the original written by <a | * Simple Metamata MParse task based on the original written by <a | ||||
@@ -204,9 +203,7 @@ public class MParse | |||||
final Path classPath = m_cmdl.createClasspath(); | final Path classPath = m_cmdl.createClasspath(); | ||||
for( int i = 0; i < jars.length; i++ ) | for( int i = 0; i < jars.length; i++ ) | ||||
{ | { | ||||
final PathElement pathElement = new PathElement(); | |||||
classPath.addPathElement( pathElement ); | |||||
pathElement.setLocation( jars[ i ] ); | |||||
classPath.addLocation( jars[ i ] ); | |||||
} | } | ||||
// set the metamata.home property | // set the metamata.home property | ||||
@@ -177,34 +177,14 @@ public abstract class DefaultRmicAdapter | |||||
// add dest dir to classpath so that previously compiled and | // add dest dir to classpath so that previously compiled and | ||||
// untouched classes are on classpath | // untouched classes are on classpath | ||||
Path classpath = new Path(); | Path classpath = new Path(); | ||||
classpath.setLocation( attributes.getBase() ); | |||||
classpath.addLocation( attributes.getBase() ); | |||||
// Combine the build classpath with the system classpath, in an | |||||
// order determined by the value of build.classpath | |||||
if( attributes.getClasspath() == null ) | |||||
{ | |||||
if( attributes.getIncludeantruntime() ) | |||||
{ | |||||
classpath.addExisting( Path.systemClasspath ); | |||||
} | |||||
} | |||||
else | |||||
// add the classpath | |||||
if ( attributes.getClasspath() != null ) | |||||
{ | { | ||||
if( attributes.getIncludeantruntime() ) | |||||
{ | |||||
classpath.addExisting( attributes.getClasspath().concatSystemClasspath( "last" ) ); | |||||
} | |||||
else | |||||
{ | |||||
classpath.addExisting( attributes.getClasspath().concatSystemClasspath( "ignore" ) ); | |||||
} | |||||
classpath.addExisting( attributes.getClasspath() ); | |||||
} | } | ||||
if( attributes.getIncludejavaruntime() ) | |||||
{ | |||||
classpath.addJavaRuntime(); | |||||
} | |||||
return classpath; | return classpath; | ||||
} | } | ||||
@@ -132,11 +132,10 @@ public class CommandlineJava | |||||
pos += sysProperties.size(); | pos += sysProperties.size(); | ||||
} | } | ||||
// classpath is a vm option too.. | // classpath is a vm option too.. | ||||
Path fullClasspath = classpath != null ? classpath.concatSystemClasspath( "ignore" ) : null; | |||||
if( fullClasspath != null && fullClasspath.toString().trim().length() > 0 ) | |||||
if( classpath != null && classpath.toString().trim().length() > 0 ) | |||||
{ | { | ||||
result[ pos++ ] = "-classpath"; | result[ pos++ ] = "-classpath"; | ||||
result[ pos++ ] = fullClasspath.toString(); | |||||
result[ pos++ ] = classpath.toString(); | |||||
} | } | ||||
// this is the classname to run as well as its arguments. | // this is the classname to run as well as its arguments. | ||||
// in case of 'executeJar', the executable is a jar file. | // in case of 'executeJar', the executable is a jar file. | ||||
@@ -215,8 +214,7 @@ public class CommandlineJava | |||||
{ | { | ||||
int size = getActualVMCommand().size() + javaCommand.size() + sysProperties.size(); | int size = getActualVMCommand().size() + javaCommand.size() + sysProperties.size(); | ||||
// classpath is "-classpath <classpath>" -> 2 args | // classpath is "-classpath <classpath>" -> 2 args | ||||
Path fullClasspath = classpath != null ? classpath.concatSystemClasspath( "ignore" ) : null; | |||||
if( fullClasspath != null && fullClasspath.toString().trim().length() > 0 ) | |||||
if( classpath != null && classpath.toString().trim().length() > 0 ) | |||||
{ | { | ||||
size += 2; | size += 2; | ||||
} | } | ||||
@@ -7,16 +7,15 @@ | |||||
*/ | */ | ||||
package org.apache.tools.ant.types; | package org.apache.tools.ant.types; | ||||
import org.apache.myrmidon.api.TaskException; | |||||
import org.apache.myrmidon.framework.DataType; | |||||
import org.apache.tools.ant.util.FileUtils; | |||||
import java.io.File; | import java.io.File; | ||||
import java.io.IOException; | import java.io.IOException; | ||||
import java.net.URL; | import java.net.URL; | ||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.Locale; | import java.util.Locale; | ||||
import org.apache.avalon.framework.logger.AbstractLogEnabled; | |||||
import org.apache.avalon.framework.logger.Logger; | |||||
import org.apache.myrmidon.api.TaskException; | |||||
import org.apache.tools.ant.ProjectComponent; | |||||
import org.apache.tools.ant.util.FileUtils; | |||||
/** | /** | ||||
* This object represents a path as used by CLASSPATH or PATH environment | * This object represents a path as used by CLASSPATH or PATH environment | ||||
@@ -50,41 +49,24 @@ import org.apache.tools.ant.util.FileUtils; | |||||
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | ||||
*/ | */ | ||||
public class Path | public class Path | ||||
extends ProjectComponent | |||||
implements Cloneable | |||||
implements DataType | |||||
{ | { | ||||
public final static Path systemClasspath = createSystemClasspath(); | |||||
private ArrayList m_elements; | |||||
private static Path createSystemClasspath() | |||||
{ | |||||
try | |||||
{ | |||||
return new Path( System.getProperty( "java.class.path" ) ); | |||||
} | |||||
catch( final TaskException te ) | |||||
{ | |||||
throw new Error( te.toString() ); | |||||
} | |||||
} | |||||
private ArrayList m_elements = new ArrayList(); | |||||
private File m_baseDirectory; | |||||
/** | /** | ||||
* Invoked by IntrospectionHelper for <code>setXXX(Path p)</code> attribute | * Invoked by IntrospectionHelper for <code>setXXX(Path p)</code> attribute | ||||
* setters. | * setters. | ||||
*/ | */ | ||||
public Path( final String path ) | public Path( final String path ) | ||||
throws TaskException | |||||
{ | { | ||||
this(); | |||||
final PathElement pathElement = new PathElement(); | final PathElement pathElement = new PathElement(); | ||||
addPathElement( pathElement ); | |||||
m_elements.add( pathElement ); | |||||
pathElement.setPath( path ); | pathElement.setPath( path ); | ||||
} | } | ||||
public Path() | public Path() | ||||
{ | { | ||||
m_elements = new ArrayList(); | |||||
} | } | ||||
/** | /** | ||||
@@ -99,28 +81,24 @@ public class Path | |||||
} | } | ||||
/** | /** | ||||
* Adds a element definition to the path. | |||||
* | |||||
* @param location the location of the element to add (must not be <code>null</code> | |||||
* nor empty. | |||||
* Sets the base directory for this path. | |||||
*/ | */ | ||||
public void setLocation( final File location ) | |||||
public void setBaseDirectory( final File baseDir ) | |||||
{ | { | ||||
final PathElement pathElement = new PathElement(); | |||||
addPathElement( pathElement ); | |||||
pathElement.setLocation( location ); | |||||
m_baseDirectory = baseDir; | |||||
} | } | ||||
/** | /** | ||||
* Parses a path definition and creates single PathElements. | |||||
* Adds a element definition to the path. | |||||
* | * | ||||
* @param path the path definition. | |||||
* @param location the location of the element to add (must not be <code>null</code> | |||||
* nor empty. | |||||
*/ | */ | ||||
public void setPath( String path ) | |||||
public void addLocation( final File location ) | |||||
{ | { | ||||
final PathElement pathElement = new PathElement(); | final PathElement pathElement = new PathElement(); | ||||
addPathElement( pathElement ); | |||||
pathElement.setPath( path ); | |||||
m_elements.add( pathElement ); | |||||
pathElement.setLocation( location ); | |||||
} | } | ||||
/** | /** | ||||
@@ -138,42 +116,7 @@ public class Path | |||||
final File file = new File( list[ i ] ); | final File file = new File( list[ i ] ); | ||||
if( file.exists() ) | if( file.exists() ) | ||||
{ | { | ||||
setLocation( file ); | |||||
} | |||||
} | |||||
} | |||||
/** | |||||
* Emulation of extdirs feature in java >= 1.2. This method adds all files | |||||
* in the given directories (but not in sub-directories!) to the classpath, | |||||
* so that you don't have to specify them all one by one. | |||||
*/ | |||||
public void addExtdirs( Path extdirs ) | |||||
throws TaskException | |||||
{ | |||||
if( extdirs == null ) | |||||
{ | |||||
String extProp = System.getProperty( "java.ext.dirs" ); | |||||
if( extProp != null ) | |||||
{ | |||||
extdirs = new Path( extProp ); | |||||
} | |||||
else | |||||
{ | |||||
return; | |||||
} | |||||
} | |||||
final String[] dirs = extdirs.list(); | |||||
for( int i = 0; i < dirs.length; i++ ) | |||||
{ | |||||
final File dir = resolveFile( dirs[ i ] ); | |||||
if( dir.exists() && dir.isDirectory() ) | |||||
{ | |||||
final FileSet fileSet = new FileSet(); | |||||
fileSet.setDir( dir ); | |||||
fileSet.setIncludes( "*" ); | |||||
addFileset( fileSet ); | |||||
addLocation( file ); | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -260,73 +203,6 @@ public class Path | |||||
} | } | ||||
} | } | ||||
/** | |||||
* Concatenates the system class path in the order specified by the | |||||
* ${build.sysclasspath} property - using "last" as default value. | |||||
* | |||||
* @return Description of the Returned Value | |||||
*/ | |||||
public Path concatSystemClasspath() | |||||
throws TaskException | |||||
{ | |||||
return concatSystemClasspath( "last" ); | |||||
} | |||||
/** | |||||
* Concatenates the system class path in the order specified by the | |||||
* ${build.sysclasspath} property - using the supplied value if | |||||
* ${build.sysclasspath} has not been set. | |||||
* | |||||
* @param defValue Description of Parameter | |||||
* @return Description of the Returned Value | |||||
*/ | |||||
public Path concatSystemClasspath( String defValue ) | |||||
throws TaskException | |||||
{ | |||||
Path result = new Path(); | |||||
String order = defValue; | |||||
if( getProject() != null ) | |||||
{ | |||||
String o = getProject().getProperty( "build.sysclasspath" ); | |||||
if( o != null ) | |||||
{ | |||||
order = o; | |||||
} | |||||
} | |||||
if( order.equals( "only" ) ) | |||||
{ | |||||
// only: the developer knows what (s)he is doing | |||||
result.addExisting( Path.systemClasspath ); | |||||
} | |||||
else if( order.equals( "first" ) ) | |||||
{ | |||||
// first: developer could use a little help | |||||
result.addExisting( Path.systemClasspath ); | |||||
result.addExisting( this ); | |||||
} | |||||
else if( order.equals( "ignore" ) ) | |||||
{ | |||||
// ignore: don't trust anyone | |||||
result.addExisting( this ); | |||||
} | |||||
else | |||||
{ | |||||
// last: don't trust the developer | |||||
if( !order.equals( "last" ) ) | |||||
{ | |||||
final String message = "invalid value for build.sysclasspath: " + order; | |||||
getLogger().warn( message ); | |||||
} | |||||
result.addExisting( this ); | |||||
result.addExisting( Path.systemClasspath ); | |||||
} | |||||
return result; | |||||
} | |||||
/** | /** | ||||
* Creates a nested <code><path></code> element. | * Creates a nested <code><path></code> element. | ||||
* | * | ||||
@@ -338,16 +214,9 @@ public class Path | |||||
m_elements.add( path ); | m_elements.add( path ); | ||||
} | } | ||||
/** | |||||
* Creates the nested <code><pathelement></code> element. | |||||
*/ | |||||
public void addPathElement( final PathElement pathElement ) | |||||
{ | |||||
m_elements.add( pathElement ); | |||||
} | |||||
/** | /** | ||||
* Returns all path elements defined by this and nested path objects. | * Returns all path elements defined by this and nested path objects. | ||||
* The paths returned by this method are absolute. | |||||
*/ | */ | ||||
public String[] list() | public String[] list() | ||||
throws TaskException | throws TaskException | ||||
@@ -363,9 +232,8 @@ public class Path | |||||
} | } | ||||
else if( o instanceof PathElement ) | else if( o instanceof PathElement ) | ||||
{ | { | ||||
final File baseDirectory = getBaseDirectory(); | |||||
final PathElement element = (PathElement)o; | final PathElement element = (PathElement)o; | ||||
final String[] parts = element.getParts( baseDirectory, getLogger() ); | |||||
final String[] parts = element.getParts( m_baseDirectory ); | |||||
if( parts == null ) | if( parts == null ) | ||||
{ | { | ||||
throw new NullPointerException( "You must either set location or path on <pathelement>" ); | throw new NullPointerException( "You must either set location or path on <pathelement>" ); | ||||
@@ -10,17 +10,19 @@ package org.apache.tools.ant.types; | |||||
import java.io.File; | import java.io.File; | ||||
import org.apache.tools.ant.util.FileUtils; | import org.apache.tools.ant.util.FileUtils; | ||||
import org.apache.avalon.framework.logger.Logger; | import org.apache.avalon.framework.logger.Logger; | ||||
import org.apache.myrmidon.api.TaskException; | |||||
/** | /** | ||||
* Helper class, holds the nested <code><pathelement></code> values. | |||||
* Helper class, holds <code><></code> values. | |||||
*/ | */ | ||||
public class PathElement | |||||
class PathElement | |||||
{ | { | ||||
private String m_location; | |||||
private String m_path; | private String m_path; | ||||
public void setLocation( final File location ) | public void setLocation( final File location ) | ||||
{ | { | ||||
m_path = FileUtils.translateFile( location.getAbsolutePath() ); | |||||
m_location = location.getAbsolutePath(); | |||||
} | } | ||||
public void setPath( String path ) | public void setPath( String path ) | ||||
@@ -28,8 +30,13 @@ public class PathElement | |||||
m_path = path; | m_path = path; | ||||
} | } | ||||
protected String[] getParts( final File baseDirectory, final Logger logger ) | |||||
protected String[] getParts( final File baseDirectory ) | |||||
throws TaskException | |||||
{ | { | ||||
return FileUtils.translatePath( baseDirectory, m_path, logger ); | |||||
if ( m_location != null ) | |||||
{ | |||||
return new String[] { m_location }; | |||||
} | |||||
return FileUtils.translatePath( baseDirectory, m_path ); | |||||
} | } | ||||
} | } |
@@ -0,0 +1,53 @@ | |||||
/* | |||||
* 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.txt file. | |||||
*/ | |||||
package org.apache.tools.ant.types.converters; | |||||
import org.apache.avalon.framework.context.Context; | |||||
import org.apache.myrmidon.converter.AbstractConverter; | |||||
import org.apache.myrmidon.converter.ConverterException; | |||||
import org.apache.tools.ant.types.Path; | |||||
/** | |||||
* A converter from String to Path. | |||||
* | |||||
* @author Adam Murdoch | |||||
*/ | |||||
public class StringToPathConverter | |||||
extends AbstractConverter | |||||
{ | |||||
/** | |||||
* Constructors a converter. | |||||
*/ | |||||
public StringToPathConverter() | |||||
{ | |||||
super( String.class, Path.class ); | |||||
} | |||||
/** | |||||
* Converts from String to Path | |||||
* | |||||
* @param original the original Object | |||||
* @param context the context in which to convert | |||||
* @return the converted object | |||||
* @exception Exception if an error occurs | |||||
*/ | |||||
protected Object convert( Object original, Context context ) | |||||
throws ConverterException | |||||
{ | |||||
/* | |||||
String path = (String)original; | |||||
TaskContext taskContext = (TaskContext)context; | |||||
Path retval = new Path( path ); | |||||
retval.setBaseDirectory( taskContext.getBaseDirectory() ); | |||||
return retval; | |||||
*/ | |||||
return null; | |||||
} | |||||
} | |||||
@@ -390,11 +390,7 @@ public class FileUtils | |||||
return ""; | return ""; | ||||
final StringBuffer result = new StringBuffer( source ); | final StringBuffer result = new StringBuffer( source ); | ||||
for( int i = 0; i < result.length(); i++ ) | |||||
{ | |||||
translateFileSep( result, i ); | |||||
} | |||||
translateFileSep( result ); | |||||
return result.toString(); | return result.toString(); | ||||
} | } | ||||
@@ -406,22 +402,25 @@ public class FileUtils | |||||
* @param pos Description of Parameter | * @param pos Description of Parameter | ||||
* @return Description of the Returned Value | * @return Description of the Returned Value | ||||
*/ | */ | ||||
public static boolean translateFileSep( StringBuffer buffer, int pos ) | |||||
public static void translateFileSep( StringBuffer buffer ) | |||||
{ | { | ||||
if( buffer.charAt( pos ) == '/' || buffer.charAt( pos ) == '\\' ) | |||||
int len = buffer.length(); | |||||
for ( int pos = 0; pos < len; pos++ ) | |||||
{ | { | ||||
buffer.setCharAt( pos, File.separatorChar ); | |||||
return true; | |||||
char ch = buffer.charAt( pos ); | |||||
if( ch == '/' || ch == '\\' ) | |||||
{ | |||||
buffer.setCharAt( pos, File.separatorChar ); | |||||
} | |||||
} | } | ||||
return false; | |||||
} | } | ||||
/** | /** | ||||
* Splits a PATH (with : or ; as separators) into its parts. | * Splits a PATH (with : or ; as separators) into its parts. | ||||
*/ | */ | ||||
public static String[] translatePath( final File baseDirectory, | public static String[] translatePath( final File baseDirectory, | ||||
String source, | |||||
final Logger logger ) | |||||
String source ) | |||||
throws TaskException | |||||
{ | { | ||||
final ArrayList result = new ArrayList(); | final ArrayList result = new ArrayList(); | ||||
if( source == null ) | if( source == null ) | ||||
@@ -431,23 +430,13 @@ public class FileUtils | |||||
StringBuffer element = new StringBuffer(); | StringBuffer element = new StringBuffer(); | ||||
for( int i = 0; i < elements.length; i++ ) | for( int i = 0; i < elements.length; i++ ) | ||||
{ | { | ||||
// Resolve the file relative to the base directory | |||||
element.setLength( 0 ); | element.setLength( 0 ); | ||||
final String pathElement = elements[ i ]; | final String pathElement = elements[ i ]; | ||||
try | |||||
{ | |||||
element.append( resolveFile( baseDirectory, pathElement ) ); | |||||
} | |||||
catch( TaskException e ) | |||||
{ | |||||
final String message = | |||||
"Dropping path element " + pathElement + " as it is not valid relative to the project"; | |||||
logger.debug( message ); | |||||
} | |||||
element.append( resolveFile( baseDirectory, pathElement ) ); | |||||
for( int j = 0; j < element.length(); j++ ) | |||||
{ | |||||
translateFileSep( element, j ); | |||||
} | |||||
// Tidy up the separators | |||||
translateFileSep( element ); | |||||
result.add( element.toString() ); | result.add( element.toString() ); | ||||
} | } | ||||
@@ -1,5 +1,17 @@ | |||||
<ant-lib> | <ant-lib> | ||||
<types> | <types> | ||||
<task name="ant1-tasklib" classname="org.apache.myrmidon.libs.ant1.Ant1Tasklib" /> | <task name="ant1-tasklib" classname="org.apache.myrmidon.libs.ant1.Ant1Tasklib" /> | ||||
<data-type name="path" classname="org.apache.tools.ant.types.Path" /> | |||||
<task name="path" classname="org.apache.myrmidon.framework.TypeInstanceTask" /> | |||||
</types> | </types> | ||||
<converters> | |||||
<converter | |||||
classname="org.apache.tools.ant.types.converters.StringToPathConverter" | |||||
source="java.lang.String" | |||||
destination="org.apache.tools.ant.types.Path" | |||||
/> | |||||
</converters> | |||||
</ant-lib> | </ant-lib> |
@@ -14,10 +14,12 @@ import java.io.PrintWriter; | |||||
import org.apache.avalon.excalibur.util.StringUtil; | import org.apache.avalon.excalibur.util.StringUtil; | ||||
import org.apache.avalon.framework.logger.AbstractLogEnabled; | import org.apache.avalon.framework.logger.AbstractLogEnabled; | ||||
import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
import org.apache.myrmidon.api.TaskContext; | |||||
import org.apache.tools.ant.taskdefs.Javac; | import org.apache.tools.ant.taskdefs.Javac; | ||||
import org.apache.tools.ant.taskdefs.exec.Execute2; | import org.apache.tools.ant.taskdefs.exec.Execute2; | ||||
import org.apache.tools.ant.types.Commandline; | import org.apache.tools.ant.types.Commandline; | ||||
import org.apache.tools.ant.types.Path; | import org.apache.tools.ant.types.Path; | ||||
import org.apache.tools.ant.types.FileSet; | |||||
/** | /** | ||||
* This is the default implementation for the CompilerAdapter interface. | * This is the default implementation for the CompilerAdapter interface. | ||||
@@ -77,8 +79,6 @@ public abstract class DefaultCompilerAdapter | |||||
m_compileList = attributes.getFileList(); | m_compileList = attributes.getFileList(); | ||||
m_compileClasspath = attributes.getClasspath(); | m_compileClasspath = attributes.getClasspath(); | ||||
m_baseDir = attributes.getBaseDirectory(); | m_baseDir = attributes.getBaseDirectory(); | ||||
m_includeAntRuntime = attributes.getIncludeantruntime(); | |||||
m_includeJavaRuntime = attributes.getIncludejavaruntime(); | |||||
m_memoryInitialSize = attributes.getMemoryInitialSize(); | m_memoryInitialSize = attributes.getMemoryInitialSize(); | ||||
m_memoryMaximumSize = attributes.getMemoryMaximumSize(); | m_memoryMaximumSize = attributes.getMemoryMaximumSize(); | ||||
} | } | ||||
@@ -283,34 +283,13 @@ public abstract class DefaultCompilerAdapter | |||||
if( m_destDir != null ) | if( m_destDir != null ) | ||||
{ | { | ||||
classpath.setLocation( m_destDir ); | |||||
classpath.addLocation( m_destDir ); | |||||
} | } | ||||
// Combine the build classpath with the system classpath, in an | |||||
// order determined by the value of build.classpath | |||||
if( m_compileClasspath == null ) | |||||
// add the classpath | |||||
if ( m_compileClasspath != null ) | |||||
{ | { | ||||
if( m_includeAntRuntime ) | |||||
{ | |||||
classpath.addExisting( Path.systemClasspath ); | |||||
} | |||||
} | |||||
else | |||||
{ | |||||
if( m_includeAntRuntime ) | |||||
{ | |||||
classpath.addExisting( m_compileClasspath.concatSystemClasspath( "last" ) ); | |||||
} | |||||
else | |||||
{ | |||||
classpath.addExisting( m_compileClasspath.concatSystemClasspath( "ignore" ) ); | |||||
} | |||||
} | |||||
if( m_includeJavaRuntime ) | |||||
{ | |||||
classpath.addJavaRuntime(); | |||||
classpath.addExisting( m_compileClasspath ); | |||||
} | } | ||||
return classpath; | return classpath; | ||||
@@ -437,5 +416,41 @@ public abstract class DefaultCompilerAdapter | |||||
getLogger().debug( niceSourceList.toString() ); | getLogger().debug( niceSourceList.toString() ); | ||||
} | } | ||||
/** | |||||
* Emulation of extdirs feature in java >= 1.2. This method adds all files | |||||
* in the given directories (but not in sub-directories!) to the classpath, | |||||
* so that you don't have to specify them all one by one. | |||||
*/ | |||||
protected void addExtdirs( Path path ) | |||||
throws TaskException | |||||
{ | |||||
if( m_extdirs == null ) | |||||
{ | |||||
String extProp = System.getProperty( "java.ext.dirs" ); | |||||
if( extProp != null ) | |||||
{ | |||||
m_extdirs = new Path( extProp ); | |||||
} | |||||
else | |||||
{ | |||||
return; | |||||
} | |||||
} | |||||
final String[] dirs = m_extdirs.list(); | |||||
for( int i = 0; i < dirs.length; i++ ) | |||||
{ | |||||
final File dir = new File( dirs[ i ] ); | |||||
if( dir.exists() && dir.isDirectory() ) | |||||
{ | |||||
final FileSet fileSet = new FileSet(); | |||||
fileSet.setDir( dir ); | |||||
fileSet.setIncludes( "*" ); | |||||
path.addFileset( fileSet ); | |||||
} | |||||
} | |||||
} | |||||
} | } | ||||
@@ -55,7 +55,7 @@ public class Gcj extends DefaultCompilerAdapter | |||||
// gcj doesn't support an extension dir (-extdir) | // gcj doesn't support an extension dir (-extdir) | ||||
// so we'll emulate it for compatibility and convenience. | // so we'll emulate it for compatibility and convenience. | ||||
classpath.addExtdirs( m_extdirs ); | |||||
addExtdirs( classpath ); | |||||
if( ( m_bootclasspath == null ) || ( m_bootclasspath.size() == 0 ) ) | if( ( m_bootclasspath == null ) || ( m_bootclasspath.size() == 0 ) ) | ||||
{ | { | ||||
@@ -52,7 +52,7 @@ public class Jikes | |||||
// Jikes doesn't support an extension dir (-extdir) | // Jikes doesn't support an extension dir (-extdir) | ||||
// so we'll emulate it for compatibility and convenience. | // so we'll emulate it for compatibility and convenience. | ||||
classpath.addExtdirs( m_extdirs ); | |||||
addExtdirs( classpath ); | |||||
if( ( m_bootclasspath == null ) || ( m_bootclasspath.size() == 0 ) ) | if( ( m_bootclasspath == null ) || ( m_bootclasspath.size() == 0 ) ) | ||||
{ | { | ||||
@@ -40,7 +40,7 @@ public class Jvc extends DefaultCompilerAdapter | |||||
// jvc doesn't support an extension dir (-extdir) | // jvc doesn't support an extension dir (-extdir) | ||||
// so we'll emulate it for compatibility and convenience. | // so we'll emulate it for compatibility and convenience. | ||||
classpath.addExtdirs( m_extdirs ); | |||||
addExtdirs( classpath ); | |||||
if( ( m_bootclasspath == null ) || ( m_bootclasspath.size() == 0 ) ) | if( ( m_bootclasspath == null ) || ( m_bootclasspath.size() == 0 ) ) | ||||
{ | { | ||||
@@ -94,7 +94,7 @@ public class Kjc extends DefaultCompilerAdapter | |||||
if( m_extdirs != null ) | if( m_extdirs != null ) | ||||
{ | { | ||||
cp.addExtdirs( m_extdirs ); | |||||
addExtdirs( cp ); | |||||
} | } | ||||
cp.append( classpath ); | cp.append( classpath ); | ||||
@@ -559,14 +559,16 @@ public class Javadoc | |||||
cmd.setExecutable( getJavadocExecutableName() ); | cmd.setExecutable( getJavadocExecutableName() ); | ||||
// ------------------------------------------------ general javadoc arguments | // ------------------------------------------------ general javadoc arguments | ||||
if( m_classpath == null ) | |||||
m_classpath = Path.systemClasspath; | |||||
else | |||||
m_classpath = m_classpath.concatSystemClasspath( "ignore" ); | |||||
// Build the classpath to pass to Javadoc | |||||
Path classpath = new Path(); | |||||
classpath.addPath( m_sourcePath ); | |||||
if ( m_classpath != null ) | |||||
{ | |||||
classpath.addPath( m_classpath ); | |||||
} | |||||
cmd.createArgument().setValue( "-classpath" ); | cmd.createArgument().setValue( "-classpath" ); | ||||
cmd.createArgument().setValue( m_sourcePath.toString() + | |||||
System.getProperty( "path.separator" ) + m_classpath.toString() ); | |||||
cmd.createArgument().setValue( classpath.toString() ); | |||||
if( m_version && m_doclet == null ) | if( m_version && m_doclet == null ) | ||||
cmd.createArgument().setValue( "-version" ); | cmd.createArgument().setValue( "-version" ); | ||||
@@ -14,6 +14,7 @@ import java.util.StringTokenizer; | |||||
import org.apache.avalon.excalibur.util.StringUtil; | import org.apache.avalon.excalibur.util.StringUtil; | ||||
import org.apache.avalon.framework.logger.AbstractLogEnabled; | import org.apache.avalon.framework.logger.AbstractLogEnabled; | ||||
import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
import org.apache.myrmidon.api.AbstractTask; | |||||
import org.apache.tools.ant.types.Commandline; | import org.apache.tools.ant.types.Commandline; | ||||
import org.apache.tools.ant.types.Path; | import org.apache.tools.ant.types.Path; | ||||
@@ -52,7 +53,7 @@ import org.apache.tools.ant.types.Path; | |||||
*/ | */ | ||||
public class Javah | public class Javah | ||||
extends AbstractLogEnabled | |||||
extends AbstractTask | |||||
{ | { | ||||
private final static String FAIL_MSG = "Compile failed, messages should have been provided."; | private final static String FAIL_MSG = "Compile failed, messages should have been provided."; | ||||
@@ -67,8 +68,10 @@ public class Javah | |||||
private String m_cls; | private String m_cls; | ||||
private File m_destDir; | private File m_destDir; | ||||
public void setBootclasspath( final Path bootclasspath ) | |||||
throws TaskException | |||||
/** | |||||
* Adds an element to the bootclasspath. | |||||
*/ | |||||
public void addBootclasspath( final Path bootclasspath ) | |||||
{ | { | ||||
if( m_bootclasspath == null ) | if( m_bootclasspath == null ) | ||||
{ | { | ||||
@@ -76,7 +79,7 @@ public class Javah | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
m_bootclasspath.append( bootclasspath ); | |||||
m_bootclasspath.addPath( bootclasspath ); | |||||
} | } | ||||
} | } | ||||
@@ -85,7 +88,10 @@ public class Javah | |||||
m_cls = cls; | m_cls = cls; | ||||
} | } | ||||
public void setClasspath( final Path classpath ) | |||||
/** | |||||
* Adds an element to the classpath. | |||||
*/ | |||||
public void addClasspath( final Path classpath ) | |||||
throws TaskException | throws TaskException | ||||
{ | { | ||||
if( m_classpath == null ) | if( m_classpath == null ) | ||||
@@ -94,7 +100,7 @@ public class Javah | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
m_classpath.append( classpath ); | |||||
m_classpath.addPath( classpath ); | |||||
} | } | ||||
} | } | ||||
@@ -149,18 +155,6 @@ public class Javah | |||||
m_verbose = verbose; | m_verbose = verbose; | ||||
} | } | ||||
public Path createBootclasspath() | |||||
{ | |||||
if( m_bootclasspath == null ) | |||||
{ | |||||
m_bootclasspath = new Path(); | |||||
} | |||||
Path path1 = m_bootclasspath; | |||||
final Path path = new Path(); | |||||
path1.addPath( path ); | |||||
return path; | |||||
} | |||||
public ClassArgument createClass() | public ClassArgument createClass() | ||||
{ | { | ||||
final ClassArgument ga = new ClassArgument(); | final ClassArgument ga = new ClassArgument(); | ||||
@@ -169,18 +163,6 @@ public class Javah | |||||
return ga; | return ga; | ||||
} | } | ||||
public Path createClasspath() | |||||
{ | |||||
if( m_classpath == null ) | |||||
{ | |||||
m_classpath = new Path(); | |||||
} | |||||
Path path1 = m_classpath; | |||||
final Path path = new Path(); | |||||
path1.addPath( path ); | |||||
return path; | |||||
} | |||||
/** | /** | ||||
* Executes the task. | * Executes the task. | ||||
*/ | */ | ||||
@@ -188,12 +170,6 @@ public class Javah | |||||
throws TaskException | throws TaskException | ||||
{ | { | ||||
validate(); | validate(); | ||||
if( m_classpath == null ) | |||||
{ | |||||
m_classpath = Path.systemClasspath; | |||||
} | |||||
doClassicCompile(); | doClassicCompile(); | ||||
} | } | ||||
@@ -215,7 +215,8 @@ public class BorlandGenerateClient extends Task | |||||
//classpath | //classpath | ||||
//add at the end of the classpath | //add at the end of the classpath | ||||
//the system classpath in order to find the tools.jar file | //the system classpath in order to find the tools.jar file | ||||
execTask.addClasspath( classpath.concatSystemClasspath() ); | |||||
// TODO - make sure tools.jar is in the classpath | |||||
//execTask.addClasspath( classpath.concatSystemClasspath( "last" ) ); | |||||
execTask.setFork( true ); | execTask.setFork( true ); | ||||
execTask.createArg().setValue( "generateclient" ); | execTask.createArg().setValue( "generateclient" ); | ||||
@@ -197,22 +197,6 @@ public class IPlanetEjbcTask extends Task | |||||
executeEjbc( getParser() ); | executeEjbc( getParser() ); | ||||
} | } | ||||
/** | |||||
* Returns the CLASSPATH to be used when calling EJBc. If no user CLASSPATH | |||||
* is specified, the System classpath is returned instead. | |||||
* | |||||
* @return Path The classpath to be used for EJBc. | |||||
*/ | |||||
private Path getClasspath() | |||||
{ | |||||
if( classpath == null ) | |||||
{ | |||||
classpath = Path.systemClasspath; | |||||
} | |||||
return classpath; | |||||
} | |||||
/** | /** | ||||
* Returns a SAXParser that may be used to process the XML descriptors. | * Returns a SAXParser that may be used to process the XML descriptors. | ||||
* | * | ||||
@@ -311,10 +295,16 @@ public class IPlanetEjbcTask extends Task | |||||
private void executeEjbc( SAXParser saxParser ) | private void executeEjbc( SAXParser saxParser ) | ||||
throws TaskException | throws TaskException | ||||
{ | { | ||||
String classpath = null; | |||||
if( classpath != null ) | |||||
{ | |||||
classpath = this.classpath.toString(); | |||||
} | |||||
IPlanetEjbc ejbc = new IPlanetEjbc( ejbdescriptor, | IPlanetEjbc ejbc = new IPlanetEjbc( ejbdescriptor, | ||||
iasdescriptor, | iasdescriptor, | ||||
dest, | dest, | ||||
getClasspath().toString(), | |||||
classpath, | |||||
saxParser ); | saxParser ); | ||||
ejbc.setRetainSource( keepgenerated ); | ejbc.setRetainSource( keepgenerated ); | ||||
ejbc.setDebugOutput( debug ); | ejbc.setDebugOutput( debug ); | ||||
@@ -17,7 +17,6 @@ import org.apache.tools.ant.taskdefs.exec.Execute2; | |||||
import org.apache.tools.ant.types.Argument; | import org.apache.tools.ant.types.Argument; | ||||
import org.apache.tools.ant.types.CommandlineJava; | import org.apache.tools.ant.types.CommandlineJava; | ||||
import org.apache.tools.ant.types.Path; | import org.apache.tools.ant.types.Path; | ||||
import org.apache.tools.ant.types.PathElement; | |||||
/** | /** | ||||
* Taskdef for the JJTree compiler compiler. | * Taskdef for the JJTree compiler compiler. | ||||
@@ -175,10 +174,7 @@ public class JJTree extends Task | |||||
throw new TaskException( "Javacchome not set." ); | throw new TaskException( "Javacchome not set." ); | ||||
} | } | ||||
final Path classpath = cmdl.createClasspath(); | final Path classpath = cmdl.createClasspath(); | ||||
final PathElement pathElement = new PathElement(); | |||||
classpath.addPathElement( pathElement ); | |||||
pathElement.setPath( javaccHome.getAbsolutePath() + | |||||
"/JavaCC.zip" ); | |||||
classpath.addLocation( new File( javaccHome, "JavaCC.zip" ) ); | |||||
classpath.addJavaRuntime(); | classpath.addJavaRuntime(); | ||||
final Argument arg = cmdl.createVmArgument(); | final Argument arg = cmdl.createVmArgument(); | ||||
@@ -18,7 +18,6 @@ import org.apache.tools.ant.types.Argument; | |||||
import org.apache.tools.ant.types.Commandline; | import org.apache.tools.ant.types.Commandline; | ||||
import org.apache.tools.ant.types.CommandlineJava; | import org.apache.tools.ant.types.CommandlineJava; | ||||
import org.apache.tools.ant.types.Path; | import org.apache.tools.ant.types.Path; | ||||
import org.apache.tools.ant.types.PathElement; | |||||
import org.apache.avalon.excalibur.util.StringUtil; | import org.apache.avalon.excalibur.util.StringUtil; | ||||
/** | /** | ||||
@@ -229,10 +228,7 @@ public class JavaCC extends Task | |||||
throw new TaskException( "Javacchome not set." ); | throw new TaskException( "Javacchome not set." ); | ||||
} | } | ||||
final Path classpath = cmdl.createClasspath(); | final Path classpath = cmdl.createClasspath(); | ||||
final PathElement pathElement = new PathElement(); | |||||
classpath.addPathElement( pathElement ); | |||||
pathElement.setPath( javaccHome.getAbsolutePath() + | |||||
"/JavaCC.zip" ); | |||||
classpath.addLocation( new File( javaccHome, "JavaCC.zip" ) ); | |||||
classpath.addJavaRuntime(); | classpath.addJavaRuntime(); | ||||
final Argument arg = cmdl.createVmArgument(); | final Argument arg = cmdl.createVmArgument(); | ||||
@@ -163,7 +163,9 @@ public class WLJspc extends MatchingTask | |||||
compileClasspath = new Path(); | compileClasspath = new Path(); | ||||
} | } | ||||
compileClasspath.append( Path.systemClasspath ); | |||||
// TODO - make sure tools.jar ends up in the classpath | |||||
//compileClasspath.append( Path.systemClasspath ); | |||||
String[] files = ds.getIncludedFiles(); | String[] files = ds.getIncludedFiles(); | ||||
//Weblogic.jspc calls System.exit() ... have to fork | //Weblogic.jspc calls System.exit() ... have to fork | ||||
@@ -463,14 +463,14 @@ public class JUnitTask extends Task | |||||
int pling = u.indexOf( "!" ); | int pling = u.indexOf( "!" ); | ||||
String jarName = u.substring( 9, pling ); | String jarName = u.substring( 9, pling ); | ||||
getLogger().debug( "Implicitly adding " + jarName + " to classpath" ); | getLogger().debug( "Implicitly adding " + jarName + " to classpath" ); | ||||
createClasspath().setLocation( new File( ( new File( jarName ) ).getAbsolutePath() ) ); | |||||
createClasspath().addLocation( new File( jarName ) ); | |||||
} | } | ||||
else if( u.startsWith( "file:" ) ) | else if( u.startsWith( "file:" ) ) | ||||
{ | { | ||||
int tail = u.indexOf( resource ); | int tail = u.indexOf( resource ); | ||||
String dirName = u.substring( 5, tail ); | String dirName = u.substring( 5, tail ); | ||||
getLogger().debug( "Implicitly adding " + dirName + " to classpath" ); | getLogger().debug( "Implicitly adding " + dirName + " to classpath" ); | ||||
createClasspath().setLocation( new File( ( new File( dirName ) ).getAbsolutePath() ) ); | |||||
createClasspath().addLocation( new File( dirName ) ); | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
@@ -23,7 +23,6 @@ import org.apache.tools.ant.types.Argument; | |||||
import org.apache.tools.ant.types.CommandlineJava; | import org.apache.tools.ant.types.CommandlineJava; | ||||
import org.apache.tools.ant.types.FileSet; | import org.apache.tools.ant.types.FileSet; | ||||
import org.apache.tools.ant.types.Path; | import org.apache.tools.ant.types.Path; | ||||
import org.apache.tools.ant.types.PathElement; | |||||
/** | /** | ||||
* Somewhat abstract framework to be used for other metama 2.0 tasks. This | * Somewhat abstract framework to be used for other metama 2.0 tasks. This | ||||
@@ -198,9 +197,7 @@ public abstract class AbstractMetamataTask | |||||
// set the classpath as the jar file | // set the classpath as the jar file | ||||
File jar = getMetamataJar( m_metamataHome ); | File jar = getMetamataJar( m_metamataHome ); | ||||
final Path classPath = m_cmdl.createClasspath(); | final Path classPath = m_cmdl.createClasspath(); | ||||
final PathElement pathElement = new PathElement(); | |||||
classPath.addPathElement( pathElement ); | |||||
pathElement.setLocation( jar ); | |||||
classPath.addLocation( jar ); | |||||
// set the metamata.home property | // set the metamata.home property | ||||
final Argument vmArgs = m_cmdl.createVmArgument(); | final Argument vmArgs = m_cmdl.createVmArgument(); | ||||
@@ -19,7 +19,6 @@ import org.apache.tools.ant.taskdefs.exec.Execute2; | |||||
import org.apache.tools.ant.types.Argument; | import org.apache.tools.ant.types.Argument; | ||||
import org.apache.tools.ant.types.CommandlineJava; | import org.apache.tools.ant.types.CommandlineJava; | ||||
import org.apache.tools.ant.types.Path; | import org.apache.tools.ant.types.Path; | ||||
import org.apache.tools.ant.types.PathElement; | |||||
/** | /** | ||||
* Simple Metamata MParse task based on the original written by <a | * Simple Metamata MParse task based on the original written by <a | ||||
@@ -204,9 +203,7 @@ public class MParse | |||||
final Path classPath = m_cmdl.createClasspath(); | final Path classPath = m_cmdl.createClasspath(); | ||||
for( int i = 0; i < jars.length; i++ ) | for( int i = 0; i < jars.length; i++ ) | ||||
{ | { | ||||
final PathElement pathElement = new PathElement(); | |||||
classPath.addPathElement( pathElement ); | |||||
pathElement.setLocation( jars[ i ] ); | |||||
classPath.addLocation( jars[ i ] ); | |||||
} | } | ||||
// set the metamata.home property | // set the metamata.home property | ||||
@@ -177,34 +177,14 @@ public abstract class DefaultRmicAdapter | |||||
// add dest dir to classpath so that previously compiled and | // add dest dir to classpath so that previously compiled and | ||||
// untouched classes are on classpath | // untouched classes are on classpath | ||||
Path classpath = new Path(); | Path classpath = new Path(); | ||||
classpath.setLocation( attributes.getBase() ); | |||||
classpath.addLocation( attributes.getBase() ); | |||||
// Combine the build classpath with the system classpath, in an | |||||
// order determined by the value of build.classpath | |||||
if( attributes.getClasspath() == null ) | |||||
{ | |||||
if( attributes.getIncludeantruntime() ) | |||||
{ | |||||
classpath.addExisting( Path.systemClasspath ); | |||||
} | |||||
} | |||||
else | |||||
// add the classpath | |||||
if ( attributes.getClasspath() != null ) | |||||
{ | { | ||||
if( attributes.getIncludeantruntime() ) | |||||
{ | |||||
classpath.addExisting( attributes.getClasspath().concatSystemClasspath( "last" ) ); | |||||
} | |||||
else | |||||
{ | |||||
classpath.addExisting( attributes.getClasspath().concatSystemClasspath( "ignore" ) ); | |||||
} | |||||
classpath.addExisting( attributes.getClasspath() ); | |||||
} | } | ||||
if( attributes.getIncludejavaruntime() ) | |||||
{ | |||||
classpath.addJavaRuntime(); | |||||
} | |||||
return classpath; | return classpath; | ||||
} | } | ||||
@@ -132,11 +132,10 @@ public class CommandlineJava | |||||
pos += sysProperties.size(); | pos += sysProperties.size(); | ||||
} | } | ||||
// classpath is a vm option too.. | // classpath is a vm option too.. | ||||
Path fullClasspath = classpath != null ? classpath.concatSystemClasspath( "ignore" ) : null; | |||||
if( fullClasspath != null && fullClasspath.toString().trim().length() > 0 ) | |||||
if( classpath != null && classpath.toString().trim().length() > 0 ) | |||||
{ | { | ||||
result[ pos++ ] = "-classpath"; | result[ pos++ ] = "-classpath"; | ||||
result[ pos++ ] = fullClasspath.toString(); | |||||
result[ pos++ ] = classpath.toString(); | |||||
} | } | ||||
// this is the classname to run as well as its arguments. | // this is the classname to run as well as its arguments. | ||||
// in case of 'executeJar', the executable is a jar file. | // in case of 'executeJar', the executable is a jar file. | ||||
@@ -215,8 +214,7 @@ public class CommandlineJava | |||||
{ | { | ||||
int size = getActualVMCommand().size() + javaCommand.size() + sysProperties.size(); | int size = getActualVMCommand().size() + javaCommand.size() + sysProperties.size(); | ||||
// classpath is "-classpath <classpath>" -> 2 args | // classpath is "-classpath <classpath>" -> 2 args | ||||
Path fullClasspath = classpath != null ? classpath.concatSystemClasspath( "ignore" ) : null; | |||||
if( fullClasspath != null && fullClasspath.toString().trim().length() > 0 ) | |||||
if( classpath != null && classpath.toString().trim().length() > 0 ) | |||||
{ | { | ||||
size += 2; | size += 2; | ||||
} | } | ||||
@@ -7,16 +7,15 @@ | |||||
*/ | */ | ||||
package org.apache.tools.ant.types; | package org.apache.tools.ant.types; | ||||
import org.apache.myrmidon.api.TaskException; | |||||
import org.apache.myrmidon.framework.DataType; | |||||
import org.apache.tools.ant.util.FileUtils; | |||||
import java.io.File; | import java.io.File; | ||||
import java.io.IOException; | import java.io.IOException; | ||||
import java.net.URL; | import java.net.URL; | ||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.Locale; | import java.util.Locale; | ||||
import org.apache.avalon.framework.logger.AbstractLogEnabled; | |||||
import org.apache.avalon.framework.logger.Logger; | |||||
import org.apache.myrmidon.api.TaskException; | |||||
import org.apache.tools.ant.ProjectComponent; | |||||
import org.apache.tools.ant.util.FileUtils; | |||||
/** | /** | ||||
* This object represents a path as used by CLASSPATH or PATH environment | * This object represents a path as used by CLASSPATH or PATH environment | ||||
@@ -50,41 +49,24 @@ import org.apache.tools.ant.util.FileUtils; | |||||
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | ||||
*/ | */ | ||||
public class Path | public class Path | ||||
extends ProjectComponent | |||||
implements Cloneable | |||||
implements DataType | |||||
{ | { | ||||
public final static Path systemClasspath = createSystemClasspath(); | |||||
private ArrayList m_elements; | |||||
private static Path createSystemClasspath() | |||||
{ | |||||
try | |||||
{ | |||||
return new Path( System.getProperty( "java.class.path" ) ); | |||||
} | |||||
catch( final TaskException te ) | |||||
{ | |||||
throw new Error( te.toString() ); | |||||
} | |||||
} | |||||
private ArrayList m_elements = new ArrayList(); | |||||
private File m_baseDirectory; | |||||
/** | /** | ||||
* Invoked by IntrospectionHelper for <code>setXXX(Path p)</code> attribute | * Invoked by IntrospectionHelper for <code>setXXX(Path p)</code> attribute | ||||
* setters. | * setters. | ||||
*/ | */ | ||||
public Path( final String path ) | public Path( final String path ) | ||||
throws TaskException | |||||
{ | { | ||||
this(); | |||||
final PathElement pathElement = new PathElement(); | final PathElement pathElement = new PathElement(); | ||||
addPathElement( pathElement ); | |||||
m_elements.add( pathElement ); | |||||
pathElement.setPath( path ); | pathElement.setPath( path ); | ||||
} | } | ||||
public Path() | public Path() | ||||
{ | { | ||||
m_elements = new ArrayList(); | |||||
} | } | ||||
/** | /** | ||||
@@ -99,28 +81,24 @@ public class Path | |||||
} | } | ||||
/** | /** | ||||
* Adds a element definition to the path. | |||||
* | |||||
* @param location the location of the element to add (must not be <code>null</code> | |||||
* nor empty. | |||||
* Sets the base directory for this path. | |||||
*/ | */ | ||||
public void setLocation( final File location ) | |||||
public void setBaseDirectory( final File baseDir ) | |||||
{ | { | ||||
final PathElement pathElement = new PathElement(); | |||||
addPathElement( pathElement ); | |||||
pathElement.setLocation( location ); | |||||
m_baseDirectory = baseDir; | |||||
} | } | ||||
/** | /** | ||||
* Parses a path definition and creates single PathElements. | |||||
* Adds a element definition to the path. | |||||
* | * | ||||
* @param path the path definition. | |||||
* @param location the location of the element to add (must not be <code>null</code> | |||||
* nor empty. | |||||
*/ | */ | ||||
public void setPath( String path ) | |||||
public void addLocation( final File location ) | |||||
{ | { | ||||
final PathElement pathElement = new PathElement(); | final PathElement pathElement = new PathElement(); | ||||
addPathElement( pathElement ); | |||||
pathElement.setPath( path ); | |||||
m_elements.add( pathElement ); | |||||
pathElement.setLocation( location ); | |||||
} | } | ||||
/** | /** | ||||
@@ -138,42 +116,7 @@ public class Path | |||||
final File file = new File( list[ i ] ); | final File file = new File( list[ i ] ); | ||||
if( file.exists() ) | if( file.exists() ) | ||||
{ | { | ||||
setLocation( file ); | |||||
} | |||||
} | |||||
} | |||||
/** | |||||
* Emulation of extdirs feature in java >= 1.2. This method adds all files | |||||
* in the given directories (but not in sub-directories!) to the classpath, | |||||
* so that you don't have to specify them all one by one. | |||||
*/ | |||||
public void addExtdirs( Path extdirs ) | |||||
throws TaskException | |||||
{ | |||||
if( extdirs == null ) | |||||
{ | |||||
String extProp = System.getProperty( "java.ext.dirs" ); | |||||
if( extProp != null ) | |||||
{ | |||||
extdirs = new Path( extProp ); | |||||
} | |||||
else | |||||
{ | |||||
return; | |||||
} | |||||
} | |||||
final String[] dirs = extdirs.list(); | |||||
for( int i = 0; i < dirs.length; i++ ) | |||||
{ | |||||
final File dir = resolveFile( dirs[ i ] ); | |||||
if( dir.exists() && dir.isDirectory() ) | |||||
{ | |||||
final FileSet fileSet = new FileSet(); | |||||
fileSet.setDir( dir ); | |||||
fileSet.setIncludes( "*" ); | |||||
addFileset( fileSet ); | |||||
addLocation( file ); | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -260,73 +203,6 @@ public class Path | |||||
} | } | ||||
} | } | ||||
/** | |||||
* Concatenates the system class path in the order specified by the | |||||
* ${build.sysclasspath} property - using "last" as default value. | |||||
* | |||||
* @return Description of the Returned Value | |||||
*/ | |||||
public Path concatSystemClasspath() | |||||
throws TaskException | |||||
{ | |||||
return concatSystemClasspath( "last" ); | |||||
} | |||||
/** | |||||
* Concatenates the system class path in the order specified by the | |||||
* ${build.sysclasspath} property - using the supplied value if | |||||
* ${build.sysclasspath} has not been set. | |||||
* | |||||
* @param defValue Description of Parameter | |||||
* @return Description of the Returned Value | |||||
*/ | |||||
public Path concatSystemClasspath( String defValue ) | |||||
throws TaskException | |||||
{ | |||||
Path result = new Path(); | |||||
String order = defValue; | |||||
if( getProject() != null ) | |||||
{ | |||||
String o = getProject().getProperty( "build.sysclasspath" ); | |||||
if( o != null ) | |||||
{ | |||||
order = o; | |||||
} | |||||
} | |||||
if( order.equals( "only" ) ) | |||||
{ | |||||
// only: the developer knows what (s)he is doing | |||||
result.addExisting( Path.systemClasspath ); | |||||
} | |||||
else if( order.equals( "first" ) ) | |||||
{ | |||||
// first: developer could use a little help | |||||
result.addExisting( Path.systemClasspath ); | |||||
result.addExisting( this ); | |||||
} | |||||
else if( order.equals( "ignore" ) ) | |||||
{ | |||||
// ignore: don't trust anyone | |||||
result.addExisting( this ); | |||||
} | |||||
else | |||||
{ | |||||
// last: don't trust the developer | |||||
if( !order.equals( "last" ) ) | |||||
{ | |||||
final String message = "invalid value for build.sysclasspath: " + order; | |||||
getLogger().warn( message ); | |||||
} | |||||
result.addExisting( this ); | |||||
result.addExisting( Path.systemClasspath ); | |||||
} | |||||
return result; | |||||
} | |||||
/** | /** | ||||
* Creates a nested <code><path></code> element. | * Creates a nested <code><path></code> element. | ||||
* | * | ||||
@@ -338,16 +214,9 @@ public class Path | |||||
m_elements.add( path ); | m_elements.add( path ); | ||||
} | } | ||||
/** | |||||
* Creates the nested <code><pathelement></code> element. | |||||
*/ | |||||
public void addPathElement( final PathElement pathElement ) | |||||
{ | |||||
m_elements.add( pathElement ); | |||||
} | |||||
/** | /** | ||||
* Returns all path elements defined by this and nested path objects. | * Returns all path elements defined by this and nested path objects. | ||||
* The paths returned by this method are absolute. | |||||
*/ | */ | ||||
public String[] list() | public String[] list() | ||||
throws TaskException | throws TaskException | ||||
@@ -363,9 +232,8 @@ public class Path | |||||
} | } | ||||
else if( o instanceof PathElement ) | else if( o instanceof PathElement ) | ||||
{ | { | ||||
final File baseDirectory = getBaseDirectory(); | |||||
final PathElement element = (PathElement)o; | final PathElement element = (PathElement)o; | ||||
final String[] parts = element.getParts( baseDirectory, getLogger() ); | |||||
final String[] parts = element.getParts( m_baseDirectory ); | |||||
if( parts == null ) | if( parts == null ) | ||||
{ | { | ||||
throw new NullPointerException( "You must either set location or path on <pathelement>" ); | throw new NullPointerException( "You must either set location or path on <pathelement>" ); | ||||
@@ -10,17 +10,19 @@ package org.apache.tools.ant.types; | |||||
import java.io.File; | import java.io.File; | ||||
import org.apache.tools.ant.util.FileUtils; | import org.apache.tools.ant.util.FileUtils; | ||||
import org.apache.avalon.framework.logger.Logger; | import org.apache.avalon.framework.logger.Logger; | ||||
import org.apache.myrmidon.api.TaskException; | |||||
/** | /** | ||||
* Helper class, holds the nested <code><pathelement></code> values. | |||||
* Helper class, holds <code><></code> values. | |||||
*/ | */ | ||||
public class PathElement | |||||
class PathElement | |||||
{ | { | ||||
private String m_location; | |||||
private String m_path; | private String m_path; | ||||
public void setLocation( final File location ) | public void setLocation( final File location ) | ||||
{ | { | ||||
m_path = FileUtils.translateFile( location.getAbsolutePath() ); | |||||
m_location = location.getAbsolutePath(); | |||||
} | } | ||||
public void setPath( String path ) | public void setPath( String path ) | ||||
@@ -28,8 +30,13 @@ public class PathElement | |||||
m_path = path; | m_path = path; | ||||
} | } | ||||
protected String[] getParts( final File baseDirectory, final Logger logger ) | |||||
protected String[] getParts( final File baseDirectory ) | |||||
throws TaskException | |||||
{ | { | ||||
return FileUtils.translatePath( baseDirectory, m_path, logger ); | |||||
if ( m_location != null ) | |||||
{ | |||||
return new String[] { m_location }; | |||||
} | |||||
return FileUtils.translatePath( baseDirectory, m_path ); | |||||
} | } | ||||
} | } |
@@ -0,0 +1,53 @@ | |||||
/* | |||||
* 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.txt file. | |||||
*/ | |||||
package org.apache.tools.ant.types.converters; | |||||
import org.apache.avalon.framework.context.Context; | |||||
import org.apache.myrmidon.converter.AbstractConverter; | |||||
import org.apache.myrmidon.converter.ConverterException; | |||||
import org.apache.tools.ant.types.Path; | |||||
/** | |||||
* A converter from String to Path. | |||||
* | |||||
* @author Adam Murdoch | |||||
*/ | |||||
public class StringToPathConverter | |||||
extends AbstractConverter | |||||
{ | |||||
/** | |||||
* Constructors a converter. | |||||
*/ | |||||
public StringToPathConverter() | |||||
{ | |||||
super( String.class, Path.class ); | |||||
} | |||||
/** | |||||
* Converts from String to Path | |||||
* | |||||
* @param original the original Object | |||||
* @param context the context in which to convert | |||||
* @return the converted object | |||||
* @exception Exception if an error occurs | |||||
*/ | |||||
protected Object convert( Object original, Context context ) | |||||
throws ConverterException | |||||
{ | |||||
/* | |||||
String path = (String)original; | |||||
TaskContext taskContext = (TaskContext)context; | |||||
Path retval = new Path( path ); | |||||
retval.setBaseDirectory( taskContext.getBaseDirectory() ); | |||||
return retval; | |||||
*/ | |||||
return null; | |||||
} | |||||
} | |||||
@@ -390,11 +390,7 @@ public class FileUtils | |||||
return ""; | return ""; | ||||
final StringBuffer result = new StringBuffer( source ); | final StringBuffer result = new StringBuffer( source ); | ||||
for( int i = 0; i < result.length(); i++ ) | |||||
{ | |||||
translateFileSep( result, i ); | |||||
} | |||||
translateFileSep( result ); | |||||
return result.toString(); | return result.toString(); | ||||
} | } | ||||
@@ -406,22 +402,25 @@ public class FileUtils | |||||
* @param pos Description of Parameter | * @param pos Description of Parameter | ||||
* @return Description of the Returned Value | * @return Description of the Returned Value | ||||
*/ | */ | ||||
public static boolean translateFileSep( StringBuffer buffer, int pos ) | |||||
public static void translateFileSep( StringBuffer buffer ) | |||||
{ | { | ||||
if( buffer.charAt( pos ) == '/' || buffer.charAt( pos ) == '\\' ) | |||||
int len = buffer.length(); | |||||
for ( int pos = 0; pos < len; pos++ ) | |||||
{ | { | ||||
buffer.setCharAt( pos, File.separatorChar ); | |||||
return true; | |||||
char ch = buffer.charAt( pos ); | |||||
if( ch == '/' || ch == '\\' ) | |||||
{ | |||||
buffer.setCharAt( pos, File.separatorChar ); | |||||
} | |||||
} | } | ||||
return false; | |||||
} | } | ||||
/** | /** | ||||
* Splits a PATH (with : or ; as separators) into its parts. | * Splits a PATH (with : or ; as separators) into its parts. | ||||
*/ | */ | ||||
public static String[] translatePath( final File baseDirectory, | public static String[] translatePath( final File baseDirectory, | ||||
String source, | |||||
final Logger logger ) | |||||
String source ) | |||||
throws TaskException | |||||
{ | { | ||||
final ArrayList result = new ArrayList(); | final ArrayList result = new ArrayList(); | ||||
if( source == null ) | if( source == null ) | ||||
@@ -431,23 +430,13 @@ public class FileUtils | |||||
StringBuffer element = new StringBuffer(); | StringBuffer element = new StringBuffer(); | ||||
for( int i = 0; i < elements.length; i++ ) | for( int i = 0; i < elements.length; i++ ) | ||||
{ | { | ||||
// Resolve the file relative to the base directory | |||||
element.setLength( 0 ); | element.setLength( 0 ); | ||||
final String pathElement = elements[ i ]; | final String pathElement = elements[ i ]; | ||||
try | |||||
{ | |||||
element.append( resolveFile( baseDirectory, pathElement ) ); | |||||
} | |||||
catch( TaskException e ) | |||||
{ | |||||
final String message = | |||||
"Dropping path element " + pathElement + " as it is not valid relative to the project"; | |||||
logger.debug( message ); | |||||
} | |||||
element.append( resolveFile( baseDirectory, pathElement ) ); | |||||
for( int j = 0; j < element.length(); j++ ) | |||||
{ | |||||
translateFileSep( element, j ); | |||||
} | |||||
// Tidy up the separators | |||||
translateFileSep( element ); | |||||
result.add( element.toString() ); | result.add( element.toString() ); | ||||
} | } | ||||