Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Fix examples for filters on dynamic variables from windows registry

Usage

Dynamic variables behave like "normal" static variables defined by the <variable> tag, except that they are evaluated on each panel change . They are maintained as normal variables in an installation process, but in comparison to them dynamic variables have been enhanced by many more facilities. You can set dynamic variables and have additional features.

Dynamic variables, like other variables can be used within ${ and } for substitution.

Dynamic variables can get their values from the following sources on the target computer:

  • plain values
  • environment variables
  • system properties
  • INI files
  • option/property files (key-value pairs)
  • XML files (using XPath-like queries)
  • INI/option/XML files from within an ZIP or JAR file
  • Windows registry
  • output of a command execution

and filter them optionally They can be filtered using regular expressions. A particular dynamic variable can be evaluated based on a certain condition.

Other variables and dynamic variables can be used within ${ and } to be replaced in the assignment expressions below.

Common attributes to Attributes common to all types of dynamic variables are:

  • name
    The name of the dynamic variable used to refer to it from panels, in variable substitution and so on. Since dynamic variables are saved like a normal variable (as $INSTALL_PATH), they can be accessed like any other variable from within an IzPack installer.
  • checkonce:= "true" | "false" (optional, defaults to "false")
    Might be added to assign a dynamic variable only one time at the beginning of the installation process, which makes it behave as Mark the dynamic variable to be evaluated just once, either when the installation starts or as soon as an optional condition gets true. This makes it behave like a normal variable, although with enhanced capabilities to gather a value.
    ignorefailure :Values gathered by a dynamic variable definition with checkonce="true" | "false" (optional, defaults to "false")
    Might can be overridden, if there is another dynamic variable with the same key (and different conditions which evaluate to  true ) found later.
  • ignorefailure:= "true" | "false" (optional, defaults to "true")
    Might be used to allow the installation to continue or abort if an error occurred during gathering the value for a certain dynamic variable.
  • condition (optional)
    The assignment of a dynamic variable itself can be made dependent on a certain condition, using the condition attribute, which refers to the ID of condition defined in the installer description elsewhere.

Types of Dynamic Variable Assignments

Plain Values

The easiest way to assign a value to a dynamic variable is a plain value.

Using a plain dynamic variable assignment is recognized by using the attribute value in the variable definition.

Specific attributes:

  • value
    The plain value to be assigned to the dynamic variable.

Example:

Code Block
langxml
titleAssigning a plain value to a dynamic variable
<dynamicvariables>
    <variable name="previous.version" value="4.3.3"/>
</dynamicvariable>

The above example is functionally equivalent to

...

langxml

...

  • unset:= "true" | "false" (optional, defaults to "true")
    By defaut, if none of the conditions of a dynamic variable of one and the same name isn't met, a dynamic variable is unset for cleanup purposes.
    Setting unset false prevents unsetting a variable if the complex condition above is not met and leaves the variable value unchanged for that definition.


Note

As dynamic variables almost completely integrate with static IzPack variables, which means they are mapped to a normal IzPack variable, they can be used as direct variables in user input fields. Take care to have stable evaluation conditions after the user entered a value or use checkonce="true" for this purpose to not override the user value after leaving the panel.

Types of Dynamic Variable Assignments

Plain Values

The easiest way to assign a value to a dynamic variable is a plain value.

Using a plain dynamic variable assignment is recognized by using the attribute value in the variable definition.

Specific attributes:

  • value
    The plain value to be assigned to the dynamic variable.

Example:

Code Block
langxml
titleAssigning a plain value to a dynamic variable
<dynamicvariables>
    <variable name="previous.version" value="4.3.3"/>
</variable>

...

dynamicvariable>

The above example is functionally equivalent to

Code Block
langxml
<variables>
    <variable name="previous.version" value="4.3.3"/>
</variable>

since there are no replacements used which might be refreshed on a panel change.

...

The condition "izpack.selected.mycoolfeature" is generated automatically when a pack with the ID "mycoolfeature" was specified. You could now use ${XML_Comment_Start} and ${XML_Comment_End} in a file which should be parsed.

Values from Environment Variables

Using a  dynamic variable assignment from an environment variable is recognized by using the attribute environment in the variable definition.

Specific attributes:

  • environment
    The name of the environment variable to get the assignment value from.
Code Block
langxml
titleAssigning the value of an environment variable to a dynamic variable
<dynamicvariables>
    <variable name="search.path" environment="PATH"/>
</dynamicvariables>

The above example is functionally equivalent to

Code Block
langxml
<variables>
    <variable name="search.path" value="${ENV[PATH]}"/>
</variable>

since there are no replacements used which might be refreshed on a panel change and the environment variable PATH won't change during the runtime of an installation process.

Values from Property/Option Files

Dynamic variables can be also assigned from a value in configuration files with key-value pairs, as property files.

Using a  dynamic variable assignment from a certain option or property of an option or property file is recognized by using the attribute file in the variable definition along with the attribute type set to "options" (or left out).

Specific attributes:

  • file
    The property/option file path to read from.
  • type := "options" | "ini" | "xml" (optional, defaults to "options")
    The file type, must be "options" to read options or properties.
  • key
    The option or property key to read the value for.

The attribute type="options" is to be used to make this file parsed as an option file. Separators between the key and value might be for instance '=', ':' including their escaped variants '\=', '\:', where leading and trailing whitespaces are trimmed off.

Example:

...

langxml
titleAssigning a dynamic variable from properties/option files

...

For example, there might be an input file test.xml installed to ${INSTALL_PATH}:

Code Block
languagexml
<?xml version="1.0"?>
<test>
	<a></a>
	${XmlCommentStart}<b></b>${XmlCommentEnd}
</test>

parsed like this in install.xml:

Code Block
languagexml
<parsable targetfile="$INSTALL_PATH/test.xml" encoding="UTF-8"/>

If the pack mycoolfeature would be enabled during the installation, the file would look like this at the end:

Code Block
languagexml
<?xml version="1.0"?>
<test>
	<a></a>
	<b></b>
</test>

otherwise the <b></b> element would be commented out:

Code Block
languagexml
<?xml version="1.0"?>
<test>
	<a></a>
	<!--<b></b>-->
</test>


Info

In the <parsable> tag don't use the type="xml" for this example, because it would replace the characters '<' and '>' in your comment XML elements by '&lt;' and '&gt;' in the resulting output.

Values from Environment Variables

Using a  dynamic variable assignment from an environment variable is recognized by using the attribute environment in the variable definition.

Specific attributes:

  • environment
    The name of the environment variable to get the assignment value from.
Code Block
langxml
titleAssigning the value of an environment variable to a dynamic variable
<dynamicvariables>
    <variable name="optionsearch.1path" checkonceenvironment="truePATH"
     />
</dynamicvariables>

The above example is functionally equivalent to

Code Block
langxml
<dynamicvariables>
    <variable    filename="search.path" value="${INSTALL_ENV[PATH}/../old_installation/test.properties" type="options"
              key="first.setting"/>

    <variable name="option.2" checkonce="true"
              file="${INSTALL_PATH}/../old_installation/test.conf" type="options"
              key="work.dir"/>

</dynamicvariables>

Values from INI Files

...

]}"/>
</dynamicvariable>

since there are no replacements used which might be refreshed on a panel change and the environment variable PATH won't change during the runtime of an installation process.

Note

There is one import difference:

  • a variable defined with the environment-attribute is resolved instantly while reading the <dynamicvariables> section. So it can be used as a parameter for subsequent file-attributes in the variable definitions for example.
  • a variable defined with the value="${ENV[PATH]}" attribute will be resolved later, so subsequent usage within <dynamicvariables> will fail.

Values from System Properties

Using a  dynamic variable assignment from an system property is recognized by using the value ${SYSTEM[property]} in the variable definition. For example the following definition will give you the java.io.tmpdir:

Code Block
langxml
<dynamicvariables>
    <variable name="tmpdir" value="${SYSTEM[java.io.tmpdir]}"/>
</dynamicvariable>

Values from Property/Option Files

Dynamic variables can be also assigned from a value in configuration files with key-value pairs which are divided into several sections, following a certain syntax, as property files.

Using a dynamic variable assignment from a certain entry option or property of an INI option or property file is recognized by using the attribute file in the variable definition along with the attribute type set to "inioptions" (default if omitted).

Specific attributes:

  • file
    The INI property/option file path to read from.
  • type := "options" | "ini" | "xml" (optional, defaults to "options")
    The file type, must be "inioptions" to read INI keys.section
    The INI section to lookup the entry inoptions or properties.
  • key
    The INI entry option or property key to read the value for.

Example:

Code Block
langxml
titleAssigning a dynamic variable from an INI file value
<dynamicvariables>
    <variable name="ini.1" checkonce="true"
              file="C:/Program Files/freesshd/FreeSSHDService.ini" type="ini"
              section="SSH server" key="SSHCMD"/>
</dynamicvariables>

Values from XML Files

Another facility of dynamic variable assignments is reading values from XML files using XPath queries. For the syntax of XPath see XML Path Language (XPath) for more information.

Using a dynamic variable assignment from a certain XML entry in a XML file is recognized by using the attribute file in the variable definition along with the attribute type set to "xml".

Specific attributes:

  • file
    The XML file path to read from.
  • type := "options" | "ini" | "xml" (optional, defaults to "options")
    The file type, must be "XML" to assume a XML file.
  • key
    The XPath path to the entry to read the value for.

Example:

...

langxml
titleDynamic variable assignment from XML file contents

...

  • escape := "true" | "false" (optional: defaults to "true")
    Whether to apply escape sequences escaped by backslashes, like defined for Java properties files.
    Set "false" especially if you want to read values with backslashes where backslashes are not assumed to introduce escape sequences, like Windows paths.

The attribute type="options" is to be used to make this file parsed as an option file. Separators between the key and value might be for instance '=', ':' including their escaped variants '\=', '\:', where leading and trailing whitespaces are trimmed off.

Example:

Code Block
langxml
titleAssigning a dynamic variable from properties/option files
<dynamicvariables>

    <variable name="option.1" checkonce="true"
              file="${INSTALL_PATH}/../old_installation/test.properties" type="options"
              key="first.setting"/>

    <variable name="option.2" checkonce="true"
              file="${INSTALL_PATH}/../old_installation/test.xmlconf"
type="xml"
              key="/installations/installation[path='/usr/local']/title[@lang='en']/text()"/>

    <variable name="XMLReadTest.2" checkonce="true" ignorefailure="false"
              file="${INSTALL_PATH}/../old_installation/test.xml" type="xml"
              key="//title[@lang='en']/text()"/>

</dynamicvariables>

Values From Configuration Files in an Archive (JAR/ZIP)

All of the above variants of reading a dynamic variable value from a configuration file can be also applied if that configuration files is packaged as an entry into a ZIP or JAR file.

Using a dynamic variable assignment from a certain entry of a configuration file packed into an archive is recognized by using the attributes jarfile or zipfile in the variable definition.

Specific attributes:

...

work.dir"/>

</dynamicvariables>

Values from INI Files

It's also possible to assign Windows INI file values to IzPack dynamic variables. INI files are 3-dimensional configuration files with key-value pairs which are divided into several sections, following a certain syntax.

Using a dynamic variable assignment from a certain entry of an INI file is recognized by using the attribute file in the variable definition along with the attribute type set to "ini".

Specific attributes:

  • file
    The INI file path to read from.
  • type := "options" | "ini" | "xml" (optional, defaults to "options")
    The file type, must be "ini" to read INI keys.
  • section
    The INI section to lookup the entry in.
  • key
    The INI entry key to read the value for.
  • escape := "true" | "false" (optional: defaults to "true")
    Whether to apply escape sequences escaped by backslashes, like defined for Java properties files.
    Set "false" especially if you want to read values with backslashes where backslashes are not assumed to introduce escape sequences, like Windows paths.

Example:

Code Block
langxml
titleAssigning a dynamic variable from an configuration entry in a JAR/ZIP fileINI file value
<dynamicvariables>

    <variable name="previousini.version1" jarfilecheckonce="${INSTALL_PATH}/${INSTALL_SUBPATH}/libs/config.jartrue"
              entryfile="release.propertiesC:/Program Files/freesshd/FreeSSHDService.ini" type="optionsini"
              keysection="release.version"
              checkonce="false" ignorefailure="true">
    </variable>

    <variable name="other.stuff" zipfile="${INSTALL_PATH}/${INSTALL_SUBPATH}/libs/misc.zip"
              entry="app.ini" type="ini"
              section="Global Settings" key="AUTOSTART"
              checkonce="true" ignorefailure="true">
    </variable>

</dynamicvariables>

Values from the Windows Registry

Dynamic variable values can be also gathered from Windows registry data.

Using a dynamic variable assignment from a registry entry is recognized by using the attribute regkey in the variable definition.

Specific attributes:

...

SSH server" key="SSHCMD"/>
</dynamicvariables>

Values from XML Files

Another facility of dynamic variable assignments is reading values from XML files using XPath queries. For the syntax of XPath see XML Path Language (XPath) for more information.

Using a dynamic variable assignment from a certain XML entry in a XML file is recognized by using the attribute file in the variable definition along with the attribute type set to "xml".

Specific attributes:

  • file
    The XML file path to read from.
  • type := "options" | "ini" | "xml" (optional, defaults to "options")
    The file type, must be "xml" to read a XML file.
  • key
    The XPath path to the entry to read the value for.
    Note: Currently, the XPath language revision depends on the JRE version the installer runs on. JRE 6/7 support XPath 1.0.

Example:

Code Block
langxml
titleAssigning a dynamic Dynamic variable value from the Windows registryassignment from XML file contents
<dynamicvariables>

    <variable name="RegistryReadTestXMLReadTest.1" checkonce="true"  ignorefailure="false"
              regkey="HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environmentfile="${INSTALL_PATH}/../old_installation/test.xml" type="xml"
              regvaluekey="Path"/>
</dynamicvariables>

Values from the Output of a Command Execution

Last but not least, a dynamic variable value can be assigned from the output of an external command execution.

Using a dynamic variable assignment from command output is recognized by using the attribute executable in the variable definition.

Specific attributes:

...

/installations/installation[path='/usr/local']/title[@lang='en']/text()"/>

    <variable name="XMLReadTest.2" checkonce="true" ignorefailure="false"
              file="${INSTALL_PATH}/../old_installation/test.xml" type="xml"
              key="//title[@lang='en']/text()"/>

</dynamicvariables>

Values From Configuration Files in an Archive (JAR/ZIP)

All of the above variants of reading a dynamic variable value from a configuration file can be also applied if that configuration files is packaged as an entry into a ZIP or JAR file.

Using a dynamic variable assignment from a certain entry of a configuration file packed into an archive is recognized by using the attributes jarfile or zipfile in the variable definition.

Specific attributes:

  • jarfile
    The jar file path to read from.
  • zipfile
    The zip file path to read from.
  • type := "options" | "ini" | "xml" (optional, defaults to "falseoptions")
    Whether the standard error output of the command should be used instead of the standard output.
    This can be useful for some commands which deliver certain information only as error, for instance 'java -version'..

Example 1:

...

  • The archived file's type.
  • section
    The INI section to lookup the entry in, is evaluated only if type = "ini".
  • key
    The XPath, INI, option or property entry key to read the value for.
  • escape := "true" | "false" (optional: defaults to "true")
    Whether to apply escape sequences escaped by backslashes, like defined for Java properties files.
    Set "false" especially if you want to read values with backslashes where backslashes are not assumed to introduce escape sequences, like Windows paths.

Example:

Code Block
langxml
titleAssigning a dynamic variable value from the output of a command executionfrom an configuration entry in a JAR/ZIP file
<dynamicvariables>

    <variable name="hostnameprevious.version" checkonce="true"
jarfile="${INSTALL_PATH}/${INSTALL_SUBPATH}/libs/config.jar"
              executableentry="release.properties" type="hostnameoptions"
              typekey="process"/>release.version"
             <variable namecheckonce="result.valuefalse" checkonceignorefailure="true">
    </variable>

    <variable    executablename="other.stuff" zipfile="${INSTALL_PATH}/bin/init.sh${INSTALL_SUBPATH}/libs/misc.zip"
              type="shell"/>

</dynamicvariables>

Example 2:

Code Block
langxml
titleAssigning a dynamic variable value from the output of a command execution
<dynamicvariables>

    <variable name="previous.java.version" checkonce="trueentry="app.ini" type="ini"
              dirsection="${INSTALL_PATH}"
              executable="jre/bin/java" stderr="trueGlobal Settings" key="AUTOSTART"
              typecheckonce="processtrue" ignorefailure="true"
              condition="haveInstallPath+isUpgrade">
    </variable>

<arg>-version</arg>
      <regex regexp="java version[^\d]+([\d\._]+)" select="\1"/>
    </variable>

</dynamicvariables>

Filtering Values Using Regular Expressions

...

</dynamicvariables>

Values from the Windows Registry

Dynamic variable values can be also gathered from Windows registry data.

Using a dynamic variable assignment from a registry entry is recognized by using the attribute regkey in the variable definition.

Specific attributes:

  • regkey
    The registry entry root key to find the registry value to read from.
  • regvalue
    The registry value to read from, which is in Microsoft terms equivalent to a key in ordinary INI files.

Example:

Code Block
langxml
titleFiltering Assigning a dynamic variable assignments using regular expressionsvalue from the Windows registry
<dynamicvariables>
     <variable name="previous.versionRegistryReadTest" jarfilecheckonce="${INSTALL_PATH}/${INSTALL_SUBPATH}/libs/config.jartrue"
              entry="release.properties" type="optionsregkey="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
              keyregvalue="release.versionPath"/>
              checkonce="false" ignorefailure="true" condition="upgradecheck">
      <regex regexp="([0-9]+(\.[0-9]+){2})" select="\1" defaultvalue="none"/>
    </variable>

    <variable name="RegExTest.Select.Windows" checkonce="true"
              regkey="HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment"
              regvalue="Path">
      <regex regexp="([^;]*)(.*)"
             select="\1"
             defaultValue="(unmatched)"
             casesensitive="false"/>
    </variable>

    <variable name="RegExTest.ReplaceFirst.Windows" checkonce="true"
              regkey="HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment"
              regvalue="Path">
      <regex regexp="([^;]*)"
             replace="+++ \1 +++"
             defaultValue="(unmatched)</dynamicvariables>

Values from the Output of a Command Execution

Last but not least, a dynamic variable value can be assigned from the output of an external command execution.

Using a dynamic variable assignment from command output is recognized by using the attribute executable in the variable definition.

Specific attributes:

  • executable
    Absolute or relative path to the command to be launched. If the "dir" attribute is used, than relative paths are computed against the mentioned directory. The characters '.' and '..' inside the command path are resolved to a canonical path according to the operating system.
  • type := "process" | "shell" (optional, defaults to "process")
    "process" - launch the command directly without an underlying shell invocation
    "shell" - launch the command over the system shell, assuming it to be a shell script
  • dir (optional)
    Absolute or relative path to a work directory, from where the command should be launched. The characters '.' and '..' inside the directory path are resolved to a canonical path according to the operating system.
  • stderr := "true" | "false" (optional, defaults to "false")
    Whether the standard error output of the command should be used instead of the standard output.
    This can be useful for some commands which deliver certain information only as error, for instance 'java -version'..

Example 1:

Code Block
langxml
titleAssigning a dynamic variable value from the output of a command execution
<dynamicvariables>

    <variable name="hostname" checkonce="true"
              executable="hostname"
              type="process"/>

    <variable name="result.value" checkonce="true"
              executable="${INSTALL_PATH}/bin/init.sh"
              type="shell"/>

</dynamicvariables>

Example 2:

Code Block
langxml
titleAssigning a dynamic variable value from the output of a command execution
<dynamicvariables>

    <variable name="previous.java.version" checkonce="true"
              dir="${INSTALL_PATH}"
              executable="jre/bin/java" stderr="true"
              type="process" ignorefailure="true"
              condition="haveInstallPath+isUpgrade">
      <arg>-version</arg>
      <filters>
        <regex regexp="java version[^\d]+([\d\._]+)" select="\1"/>
      </filters>
    </variable>

</dynamicvariables>

Filtering Values

After straight evaluation, each dynamic variable value can be filtered using predefined filters. Each filter might have a number of attributes to configure its behavior.

Multiple nested filters can be used. The filters will be applied in the order in which they are defined.

Filters are evaluated on each panel change, regardless whether <dynamicvariable checkonce="true"/>, because several variables that might changed are also resolved in a filter.

Filters are embedded in the nested filters element like this:

Code Block
languagehtml/xml
titleDynamic Variable Filter Element Definition
<dynamicvariables>
   <variable ... <!-- other nested arguments might go here -->
      <filters>
         <filter1 .../>
         <filter2 .../>
         ... <!-- more filters might go here -->
      </filters>
   </variable>
</dynamicvariable>


Regular Expression Filter

After straight evaluation, each dynamic variable's value can be filtered using a Java regular expression. This is done by the nested regex element.

Attributes:

  • regexp
    The Java regular expression to be used for selecting from the variable value or for replacing certain parts of the variable value. For more information see the Java Platform SE 6 API and other documents describing the according regular expression syntax more in detail.
  • select (one of both, select or replace must be given)
    Selection expression according to regexp, used to select certain groups from the expression defined in regexp and possibly combine them with several text around.
  • replace (one of both, select or replace must be given)
    Replacement expression according to regexp, used to replace the regular expression defined in regexp and possibly combine them with several text around.
  • defaultvalue (optional)
    The default value to be used if the expression defined in regexp does not match the enclosing variable value at all.
  • casesensitive (optional, defaults to "true")
    Whether the regular expression matching should consider the case of alphabetic letters or not for matching.
  • global (optional, defaults to "false")
    Whether the replacement operation should be performed on the entire variable value, rather than just the first occurance. This has effect only on using together with replace.

Example:

Code Block
langxml
titleFiltering dynamic variable assignments using regular expressions
<dynamicvariables>

	<!--
      Read the property value of release.version in the resource release.properties from the root of the config.jar file.
	  Filter just the version string from the result, if there is one, otherwise return 'none'.
      -->
    <variable name="previous.version" jarfile="${INSTALL_PATH}/${INSTALL_SUBPATH}/libs/config.jar"
              entry="release.properties" type="options"
              key="release.version"
              checkonce="false" ignorefailure="true" condition="upgradecheck">
      <filters>
        <regex regexp="([0-9]+(\.[0-9]+){2})" select="\1" defaultvalue="none"/>
      </filters>
    </variable>

	<!--
      Read the value of the Windows system environment variable %PATH% directly from the Windows registry (can done smarter by ${SYSTEM[PATH]}).
      Filter just the first single path (if there are more separated by the ';' character). If there was a valid value, otherwise return '(unmatched)'.
      -->
    <variable name="RegExTest.Select.Windows" checkonce="true"
              regkey="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
              regvalue="Path">
      <filters>
        <regex regexp="([^;]*)(.*)"
               select="\1"
               defaultvalue="(unmatched)"
               casesensitive="false"/>
      </filters>
    </variable>

	<!--
      Read the value of the Windows system environment variable %PATH% directly from the Windows registry (can done smarter by ${SYSTEM[PATH]}).
      Filter just the first single path (if there are more separated by the ';' character).
	  Prepend and append three plus signs to the resulting value, if there was a valid value, otherwise return '(unmatched)'.
      -->
    <variable name="RegExTest.ReplaceFirst.Windows" checkonce="true"
              regkey="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
              regvalue="Path">
      <filters>
        <regex regexp="([^;]*)"
               replace="+++ \1 +++"
               defaultvalue="(unmatched)"
               casesensitive="false"
               global="false"/>
      </filters>
    </variable>

</dynamicvariables>

Location Filter

After straight evaluation, each dynamic variable value can be filtered to be canonicalized like a filename. This is done by the nested location element. Operating system-specific path conventions are considered when assembling the result.

This means especially the file separator will be converted to that of the target operating system. On Windows, an absolute path is assumed to start with a drive letter followed by a colon, on Unix or MacOSX by a slash.

Furthermore all path parts containing /./ are replaced by the file separator and /dir/../ by the parent directory of dir.

Attributes:

  • basedir
    The root directory relative path to be assumed when the origin value is not an absolute path. If not set, the current working directory is assumed as the base directory, instead.

Example:

Assuming all defined conditions are met, the following definition converts all ${previous.wrapper.java.home.canonical}/bin/java not being an absolute path to a canonical path of the form

${INSTALL_PATH}/${previous.wrapper.java.home.canonical}/bin/java

on Unix or

${INSTALL_PATH}\${previous.wrapper.java.home.canonical}\bin\java

on Windows.

Code Block
languagehtml/xml
titleExample of the location filter
<dynamicvariables>
   <variable name="previous.wrapper.java.command.canonical" value="${previous.wrapper.java.home.canonical}/bin/java"
             casesensitivecondition="false"haveInstallPath+isCompatibleUpgrade+haveWrapperJavaCmd+isSetCanonicalJavaHome">
      <filters>
      global   <location basedir="false${INSTALL_PATH}"/>
      </variable>filters>
     <variable name="RegExTest.ReplaceAll.Windows" checkonce="true"
              regkey="HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment"
              regvalue="Path">
      <regex regexp="([^;]*)"
             replace="+++ \1 +++"
   </variable>
</dynamicvariables>

Case Style Filter

Sometimes you need a variable value with all lowercase or all uppercase. This filter has been introduced in version 5.0.0-rc5.

Attributes:

  • style
    How the value should be capitalized. Possible values are "lowercase" and "uppercase".

Example:

Code Block
titleExample of the case style filter
<dynamicvariables>
   <variable name="var1" value="Some Text" >
      <filters>
         defaultValue<case style="(unmatched)lower"/>
      </filters>
   </variable>
  casesensitive <variable name="var2" value="false"${var1}" >
      <filters>
      global   <case style="trueupper"/>
      </filters>
   </variable>
 </dynamicvariables>

will set var1 to "some text" and var2 to "SOME TEXT".