Package org.apache.tools.ant.taskdefs

# Class Rmic

java.lang.Object
org.apache.tools.ant.ProjectComponent
org.apache.tools.ant.Task
org.apache.tools.ant.taskdefs.MatchingTask
org.apache.tools.ant.taskdefs.Rmic

All Implemented Interfaces:
  `Cloneable`, `SelectorContainer`

public class Rmic extends MatchingTask

Runs the rmic compiler against classes.

Rmic can be run on a single class (as specified with the classname attribute) or a number of classes at once (all classes below base that are neither _Stub nor _Skel classes). If you want to rmic a single class and this class is a class nested into another class, you have to specify the classname in the form `Outer$$Inner` instead of `Outer.Inner`.

It is possible to refine the set of files that are being rmiced. This can be done with the includes, includesfile, excludes, excludesfile and defaultexcludes attributes. With the includes or includesfile attribute you specify the files you want to have included by using patterns. The exclude or excludesfile attribute is used to specify the files you want to have excluded. This is also done with patterns. And finally with the defaultexcludes attribute, you can specify whether you want to use default exclusions or not. See the section on directory based tasks, on how the inclusion/exclusion of files works, and how to write patterns.

This task forms an implicit FileSet and supports all attributes of `<fileset>` (`dir` becomes `base`) as well as the nested `<include>`, `<exclude>` and `<patternset>` elements.

It is possible to use different compilers. This can be selected with the "build.rmic" property or the `compiler` attribute. There are three choices:

- sun (the standard compiler of the JDK)
- kaffe (the standard compiler of Kaffe)
- weblogic

The miniRMI project contains a compiler implementation for this task as well, please consult miniRMI's documentation to learn how to use it.

Since:
  Ant 1.1

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `class`
  `Rmic.ImplementationSpecificArgument`
  Adds an "compiler" attribute to Commandline$Attribute used to filter command line attributes based on the current implementation.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final String`
  `ERROR_BASE_NOT_SET`
  base attribute not set message
  `static final String`
  `ERROR_LOADING_CAUSED_EXCEPTION`
  loaded error message
  `static final String`
  `ERROR_NO_BASE_EXISTS`
  base not exists message
  `static final String`
  `ERROR_NOT_A_DIR`
  base not a directory message
  `static final String`
  `ERROR_NOT_DEFINED`
  not defined message
  `static final String`
  `ERROR_NOT_FOUND`
  could not be found message
  `static final String`
  `ERROR_RMIC_FAILED`
  rmic failed message
  `static final String`
  `ERROR_UNABLE_TO_VERIFY_CLASS`
  unable to verify message

  ### Fields inherited from class org.apache.tools.ant.taskdefs.MatchingTask

  `fileset`

  ### Fields inherited from class org.apache.tools.ant.Task

  `target, taskName, taskType, wrapper`

  ### Fields inherited from class org.apache.tools.ant.ProjectComponent

  `description, location, project`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `Rmic()`
  Constructor for Rmic.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `add(RmicAdapter adapter)`
  Set the compiler adapter explicitly.
  `protected void`
  `cleanup()`
  Cleans up resources.
  `Path`
  `createClasspath()`
  Creates a nested classpath element.
  `Rmic.ImplementationSpecificArgument`
  `createCompilerArg()`
  Adds an implementation specific command line argument.
  `Path`
  `createCompilerClasspath()`
  The classpath to use when loading the compiler implementation if it is not a built-in one.
  `Path`
  `createExtdirs()`
  Maybe creates a nested extdirs element.
  `void`
  `execute()`
  execute by creating an instance of an implementation class and getting to do the work
  `File`
  `getBase()`
  Gets the base directory to output generated class.
  `String`
  `getClassname()`
  Gets the class name to compile.
  `Path`
  `getClasspath()`
  Gets the classpath.
  `Vector<String>`
  `getCompileList()`
  `String`
  `getCompiler()`
  get the name of the current compiler
  `String[]`
  `getCurrentCompilerArgs()`
  Get the additional implementation specific command line arguments.
  `boolean`
  `getDebug()`
  Gets the debug flag.
  `File`
  `getDestdir()`
  Gets the base directory to output the generated files.
  `String`
  `getExecutable()`
  Explicitly specified name of the executable to use when forking - if any.
  `Path`
  `getExtdirs()`
  Gets the extension directories that will be used during the compilation.
  `Vector<String>`
  `getFileList()`
  Gets file list to compile.
  `boolean`
  `getFiltering()`
  Gets whether token filtering is set
  `boolean`
  `getIdl()`
  Gets IDL flags.
  `String`
  `getIdlopts()`
  Gets additional arguments for idl compile.
  `boolean`
  `getIiop()`
  Gets iiop flags.
  `String`
  `getIiopopts()`
  Gets additional arguments for iiop.
  `boolean`
  `getIncludeantruntime()`
  Gets whether or not the ant classpath is to be included in the task's classpath.
  `boolean`
  `getIncludejavaruntime()`
  Gets whether or not the java runtime should be included in this task's classpath.
  `ClassLoader`
  `getLoader()`
  Classloader for the user-specified classpath.
  `File`
  `getOutputDir()`
  Gets the base directory to output the generated files, favoring destdir if set, otherwise defaulting to basedir.
  `Class<?>`
  `getRemoteInterface(Class<?> testClass)`
  Returns the topmost interface that extends Remote for a given class - if one exists.
  `File`
  `getSourceBase()`
  Gets the source dirs to find the source java files.
  `String`
  `getStubVersion()`
  Gets the JDK version for the generated stub code.
  `boolean`
  `getVerify()`
  Get verify flag.
  `boolean`
  `isValidRmiRemote(String classname)`
  Load named class and test whether it can be rmic'ed
  `protected void`
  `scanDir(File baseDir, String[] files, FileNameMapper mapper)`
  Scans the directory looking for class files to be compiled.
  `void`
  `setBase(File base)`
  Sets the location to store the compiled files; required
  `void`
  `setClassname(String classname)`
  Sets the class to run `rmic` against; optional
  `void`
  `setClasspath(Path classpath)`
  Set the classpath to be used for this compilation.
  `void`
  `setClasspathRef(Reference pathRef)`
  Adds to the classpath a reference to a <path> defined elsewhere.
  `void`
  `setCompiler(String compiler)`
  Sets the compiler implementation to use; optional, defaults to the value of the `build.rmic` property, or failing that, default compiler for the current VM
  `void`
  `setDebug(boolean debug)`
  Generate debug info (passes -g to rmic); optional, defaults to false
  `void`
  `setDestdir(File destdir)`
  Sets the base directory to output the generated files.
  `void`
  `setExecutable(String ex)`
  Name of the executable to use when forking.
  `void`
  `setExtdirs(Path extDirs)`
  Sets the extension directories that will be used during the compilation; optional.
  `void`
  `setFiltering(boolean filter)`
  Sets token filtering [optional], default=false
  `void`
  `setIdl(boolean idl)`
  Indicates that IDL output should be generated.
  `void`
  `setIdlopts(String idlOpts)`
  pass additional arguments for IDL compile
  `void`
  `setIiop(boolean iiop)`
  Indicates that IIOP compatible stubs should be generated; optional, defaults to false if not set.
  `void`
  `setIiopopts(String iiopOpts)`
  Set additional arguments for iiop
  `void`
  `setIncludeantruntime(boolean include)`
  Sets whether or not to include ant's own classpath in this task's classpath.
  `void`
  `setIncludejavaruntime(boolean include)`
  task's classpath.
  `void`
  `setListfiles(boolean list)`
  If true, list the source files being handed off to the compiler.
  `void`
  `setSourceBase(File sourceBase)`
  optional directory to save generated source files to.
  `void`
  `setStubVersion(String stubVersion)`
  Specify the JDK version for the generated stub code.
  `void`
  `setVerify(boolean verify)`
  Flag to enable verification so that the classes found by the directory match are checked to see if they implement java.rmi.Remote.

  ### Methods inherited from class org.apache.tools.ant.taskdefs.MatchingTask

  `add, addAnd, addContains, addContainsRegexp, addCustom, addDate, addDepend, addDepth, addDifferent, addFilename, addMajority, addModified, addNone, addNot, addOr, addPresent, addSelector, addSize, addType, appendSelector, createExclude, createExcludesFile, createInclude, createIncludesFile, createPatternSet, getDirectoryScanner, getImplicitFileSet, getSelectors, hasSelectors, selectorCount, selectorElements, setCaseSensitive, setDefaultexcludes, setExcludes, setExcludesfile, setFollowSymlinks, setIncludes, setIncludesfile, setProject, XsetIgnore, XsetItems`

  ### Methods inherited from class org.apache.tools.ant.Task

  `bindToOwner, getOwningTarget, getRuntimeConfigurableWrapper, getTaskName, getTaskType, getWrapper, handleErrorFlush, handleErrorOutput, handleFlush, handleInput, handleOutput, init, isInvalid, log, log, log, log, maybeConfigure, perform, reconfigure, setOwningTarget, setRuntimeConfigurableWrapper, setTaskName, setTaskType`

  ### Methods inherited from class org.apache.tools.ant.ProjectComponent

  `clone, getDescription, getLocation, getProject, setDescription, setLocation`

  ### Methods inherited from class java.lang.Object

  `equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### ERROR_RMIC_FAILED

    public static final String ERROR_RMIC_FAILED
    rmic failed message
    See Also:
      - Constant Field Values

  - ### ERROR_UNABLE_TO_VERIFY_CLASS

    public static final String ERROR_UNABLE_TO_VERIFY_CLASS
    unable to verify message
    See Also:
      - Constant Field Values

  - ### ERROR_NOT_FOUND

    public static final String ERROR_NOT_FOUND
    could not be found message
    See Also:
      - Constant Field Values

  - ### ERROR_NOT_DEFINED

    public static final String ERROR_NOT_DEFINED
    not defined message
    See Also:
      - Constant Field Values

  - ### ERROR_LOADING_CAUSED_EXCEPTION

    public static final String ERROR_LOADING_CAUSED_EXCEPTION
    loaded error message
    See Also:
      - Constant Field Values

  - ### ERROR_NO_BASE_EXISTS

    public static final String ERROR_NO_BASE_EXISTS
    base not exists message
    See Also:
      - Constant Field Values

  - ### ERROR_NOT_A_DIR

    public static final String ERROR_NOT_A_DIR
    base not a directory message
    See Also:
      - Constant Field Values

  - ### ERROR_BASE_NOT_SET

    public static final String ERROR_BASE_NOT_SET
    base attribute not set message
    See Also:
      - Constant Field Values

- ## Constructor Details

  - ### Rmic

    public Rmic()
    Constructor for Rmic.

- ## Method Details

  - ### setBase

    public void setBase(File base)
    Sets the location to store the compiled files; required
    Parameters:
      `base` - the location to store the compiled files

  - ### setDestdir

    public void setDestdir(File destdir)
    Sets the base directory to output the generated files.
    Parameters:
      `destdir` - the base directory to output the generated files.
    Since:
      Ant 1.8.0

  - ### getDestdir

    public File getDestdir()
    Gets the base directory to output the generated files.
    Returns:
      the base directory to output the generated files.
    Since:
      Ant 1.8.0

  - ### getOutputDir

    public File getOutputDir()
    Gets the base directory to output the generated files, favoring destdir if set, otherwise defaulting to basedir.
    Returns:
      the actual directory to output to (either destdir or basedir)
    Since:
      Ant 1.8.0

  - ### getBase

    public File getBase()
    Gets the base directory to output generated class.
    Returns:
      the location of the compiled files

  - ### setClassname

    public void setClassname(String classname)
    Sets the class to run `rmic` against; optional
    Parameters:
      `classname` - the name of the class for rmic to create code for

  - ### getClassname

    public String getClassname()
    Gets the class name to compile.
    Returns:
      the name of the class to compile

  - ### setSourceBase

    public void setSourceBase(File sourceBase)
    optional directory to save generated source files to.
    Parameters:
      `sourceBase` - the directory to save source files to.

  - ### getSourceBase

    public File getSourceBase()
    Gets the source dirs to find the source java files.
    Returns:
      sourceBase the directory containing the source files.

  - ### setStubVersion

    public void setStubVersion(String stubVersion)
    Specify the JDK version for the generated stub code. Specify "1.1" to pass the "-v1.1" option to rmic.
    Parameters:
      `stubVersion` - the JDK version

  - ### getStubVersion

    public String getStubVersion()
    Gets the JDK version for the generated stub code.
    Returns:
      stubVersion

  - ### setFiltering

    public void setFiltering(boolean filter)
    Sets token filtering [optional], default=false
    Parameters:
      `filter` - turn on token filtering

  - ### getFiltering

    public boolean getFiltering()
    Gets whether token filtering is set
    Returns:
      filtering

  - ### setDebug

    public void setDebug(boolean debug)
    Generate debug info (passes -g to rmic); optional, defaults to false
    Parameters:
      `debug` - turn on debug info

  - ### getDebug

    public boolean getDebug()
    Gets the debug flag.
    Returns:
      debug

  - ### setClasspath

    public void setClasspath(Path classpath)
    Set the classpath to be used for this compilation.
    Parameters:
      `classpath` - the classpath used for this compilation

  - ### createClasspath

    public Path createClasspath()
    Creates a nested classpath element.
    Returns:
      classpath

  - ### setClasspathRef

    public void setClasspathRef(Reference pathRef)
    Adds to the classpath a reference to a <path> defined elsewhere.
    Parameters:
      `pathRef` - the reference to add to the classpath

  - ### getClasspath

    public Path getClasspath()
    Gets the classpath.
    Returns:
      the classpath

  - ### setVerify

    public void setVerify(boolean verify)
    Flag to enable verification so that the classes found by the directory match are checked to see if they implement java.rmi.Remote. optional; This defaults to false if not set.
    Parameters:
      `verify` - turn on verification for classes

  - ### getVerify

    public boolean getVerify()
    Get verify flag.
    Returns:
      verify

  - ### setIiop

    public void setIiop(boolean iiop)
    Indicates that IIOP compatible stubs should be generated; optional, defaults to false if not set.
    Parameters:
      `iiop` - generate IIOP compatible stubs

  - ### getIiop

    public boolean getIiop()
    Gets iiop flags.
    Returns:
      iiop

  - ### setIiopopts

    public void setIiopopts(String iiopOpts)
    Set additional arguments for iiop
    Parameters:
      `iiopOpts` - additional arguments for iiop

  - ### getIiopopts

    public String getIiopopts()
    Gets additional arguments for iiop.
    Returns:
      iiopOpts

  - ### setIdl

    public void setIdl(boolean idl)
    Indicates that IDL output should be generated. This defaults to false if not set.
    Parameters:
      `idl` - generate IDL output

  - ### getIdl

    public boolean getIdl()
    Gets IDL flags.
    Returns:
      the idl flag

  - ### setIdlopts

    public void setIdlopts(String idlOpts)
    pass additional arguments for IDL compile
    Parameters:
      `idlOpts` - additional IDL arguments

  - ### getIdlopts

    public String getIdlopts()
    Gets additional arguments for idl compile.
    Returns:
      the idl options

  - ### getFileList

    public Vector<String> getFileList()
    Gets file list to compile.
    Returns:
      the list of files to compile.

  - ### setIncludeantruntime

    public void setIncludeantruntime(boolean include)
    Sets whether or not to include ant's own classpath in this task's classpath. Optional; default is `true`.
    Parameters:
      `include` - if true include ant's classpath

  - ### getIncludeantruntime

    public boolean getIncludeantruntime()
    Gets whether or not the ant classpath is to be included in the task's classpath.
    Returns:
      true if ant's classpath is to be included

  - ### setIncludejavaruntime

    public void setIncludejavaruntime(boolean include)
    task's classpath. Enables or disables including the default run-time libraries from the executing VM; optional, defaults to false
    Parameters:
      `include` - if true include default run-time libraries

  - ### getIncludejavaruntime

    public boolean getIncludejavaruntime()
    Gets whether or not the java runtime should be included in this task's classpath.
    Returns:
      true if default run-time libraries are included

  - ### setExtdirs

    public void setExtdirs(Path extDirs)
    Sets the extension directories that will be used during the compilation; optional.
    Parameters:
      `extDirs` - the extension directories to be used

  - ### createExtdirs

    public Path createExtdirs()
    Maybe creates a nested extdirs element.
    Returns:
      path object to be configured with the extension directories

  - ### getExtdirs

    public Path getExtdirs()
    Gets the extension directories that will be used during the compilation.
    Returns:
      the extension directories to be used

  - ### getCompileList

    public Vector<String> getCompileList()
    Returns:
      the compile list.

  - ### setCompiler

    public void setCompiler(String compiler)
    Sets the compiler implementation to use; optional, defaults to the value of the `build.rmic` property, or failing that, default compiler for the current VM
    Parameters:
      `compiler` - the compiler implementation to use
    Since:
      Ant 1.5

  - ### getCompiler

    public String getCompiler()
    get the name of the current compiler
    Returns:
      the name of the compiler
    Since:
      Ant 1.5

  - ### createCompilerArg

    public Rmic.ImplementationSpecificArgument createCompilerArg()
    Adds an implementation specific command line argument.
    Returns:
      an object to be configured with a command line argument
    Since:
      Ant 1.5

  - ### getCurrentCompilerArgs

    public String[] getCurrentCompilerArgs()
    Get the additional implementation specific command line arguments.
    Returns:
      array of command line arguments, guaranteed to be non-null.
    Since:
      Ant 1.5

  - ### setExecutable

    public void setExecutable(String ex)
    Name of the executable to use when forking.
    Parameters:
      `ex` - String
    Since:
      Ant 1.8.0

  - ### getExecutable

    public String getExecutable()
    Explicitly specified name of the executable to use when forking - if any.
    Returns:
      String
    Since:
      Ant 1.8.0

  - ### createCompilerClasspath

    public Path createCompilerClasspath()
    The classpath to use when loading the compiler implementation if it is not a built-in one.
    Returns:
      Path
    Since:
      Ant 1.8.0

  - ### setListfiles

    public void setListfiles(boolean list)
    If true, list the source files being handed off to the compiler.
    Parameters:
      `list` - if true list the source files
    Since:
      Ant 1.8.0

  - ### add

    public void add(RmicAdapter adapter)
    Set the compiler adapter explicitly.
    Parameters:
      `adapter` - RmicAdapter
    Since:
      Ant 1.8.0

  - ### execute

    public void execute() throws BuildException
    execute by creating an instance of an implementation class and getting to do the work
    Overrides:
      `execute` in class `Task`
    Throws:
      `BuildException` - if there's a problem with baseDir or RMIC

  - ### cleanup

    protected void cleanup()
    Cleans up resources.
    Since:
      Ant 1.8.0

  - ### scanDir

    protected void scanDir(File baseDir, String[] files, FileNameMapper mapper)
    Scans the directory looking for class files to be compiled. The result is returned in the class variable compileList.
    Parameters:
      `baseDir` - the base direction
      `files` - the list of files to scan
      `mapper` - the mapper of files to target files

  - ### isValidRmiRemote

    public boolean isValidRmiRemote(String classname)
    Load named class and test whether it can be rmic'ed
    Parameters:
      `classname` - the name of the class to be tested
    Returns:
      true if the class can be rmic'ed

  - ### getRemoteInterface

    public Class<?> getRemoteInterface(Class<?> testClass)
    Returns the topmost interface that extends Remote for a given class - if one exists.
    Parameters:
      `testClass` - the class to be tested
    Returns:
      the topmost interface that extends Remote, or null if there is none.

  - ### getLoader

    public ClassLoader getLoader()
    Classloader for the user-specified classpath.
    Returns:
      the classloader