Clad User Manual: Difference between revisions
Line 45: | Line 45: | ||
Make sure the JAR or the directory is first on the class path (otherwise other <tt><your-command-name>Command.class</tt>, if exist, will be instantiated first). | Make sure the JAR or the directory is first on the class path (otherwise other <tt><your-command-name>Command.class</tt>, if exist, will be instantiated first). | ||
</font> | |||
==In-line Application Help== | |||
=Implementing a Command= | =Implementing a Command= |
Revision as of 05:01, 2 March 2016
Internal
Overview
The framework scans the command line looking for the first argument that can be mapped to a command.
The mapping process involves scanning the classpath and looking for classes implementing the Command interface. The current version does not introspect all classes, but just those whose simple class name match the following pattern: <commandName>Command.
All arguments between the wrapper name and the command name are interpreted as global options.
All arguments following the command name are interpreted as command options.
wrapper [global-options] command [command-options]
Options
The options use the GNU command line convention:
-o <value> | --option=<value>
Configuration File
Each command line option has a configuration file correspondent. Command line value takes precedence over the configuration file value.
Implementing a Command Line Application
Implement ApplicationRuntime interface or extend ApplicationRuntimeBase
Package the application runtime implementation class and the commands in a JAR (or place them in a directory).
Set “application.name” as a system property. If the application runtime implementation class is BlueApplicationRuntime, the application.name must be “blue”.
Make sure the JAR or the directory is first on the class path (otherwise other <your-command-name>Command.class, if exist, will be instantiated first).
In-line Application Help
Implementing a Command
Implement the Command interface.
The implementation class must be named <command-name>Command.
Example: PrintCommand will be matched to the "print" command. BusinessScenarioCommand will be matched to the "business-scenario" command.
Relationship between Command and ApplicationRuntime
If a specific command does not need an application runtime instance (thus the framework is not required to instantiate an application runtime for it), the Command.needsRuntime() implementation must return false. By default CommandBase.needsRuntime() returns true.
In-Line Command Help
If a text file named <command-name>.txt is placed in the same package as the command implementation class, the framework will send the content of the file to stdout when in-line command help is requested:
<wrapper> --help <command>
Command Execution
execute() will be called on the main thread.