...
Dynamic variables behave like static variables, except except that they are evaluated on each panel change and have additional features.
...
- name
The name of the dynamic variable used to refer to it. - checkonce:= "true" | "false" (optional, defaults to "false")
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.
Values gathered by a dynamic variable definition with checkonce="true" can be overridden, if there is another dynamic variable with the same key (and different conditions ) defined, which gets evaluate to true ) found later. - ignorefailure:= "true" | "false" (optional, defaults to "falsetrue")
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. - 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. |
...
- value
The plain value to be assigned to the dynamic variable.
Example:
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
<dynamicvariables> <variable name="previous.version" value="4.3.3"/> </dynamicvariable> |
...
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 parsedComment_End} in a file which should be parsed.
For example, there might be an input file test.xml installed to ${INSTALL_PATH}:
Code Block | ||
---|---|---|
| ||
<?xml version="1.0"?>
<test>
<a></a>
${XmlCommentStart}<b></b>${XmlCommentEnd}
</test> |
parsed like this in install.xml:
Code Block | ||
---|---|---|
| ||
<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 | ||
---|---|---|
| ||
<?xml version="1.0"?>
<test>
<a></a>
<b></b>
</test> |
otherwise the <b></b> element would be commented out:
Code Block | ||
---|---|---|
| ||
<?xml version="1.0"?>
<test>
<a></a>
<!--<b></b>-->
</test> |
Info |
---|
In the |
Values from Environment Variables
...
- environment
The name of the environment variable to get the assignment value from.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
<dynamicvariables> <variable name="search.path" environment="PATH"/> </dynamicvariables> |
...
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 | ||||||
---|---|---|---|---|---|---|
| ||||||
<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.conf" key="work.dir"/> </dynamicvariables> |
...
- 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 | ||||||
---|---|---|---|---|---|---|
| ||||||
<dynamicvariables> <variable name="ini.1" checkonce="true" file="C:/Program Files/freesshd/FreeSSHDService.ini" type="ini" section="SSH server" key="SSHCMD"/> </dynamicvariables> |
...
- 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 | ||||||
---|---|---|---|---|---|---|
| ||||||
<dynamicvariables> <variable name="XMLReadTest.1" checkonce="true" ignorefailure="false" file="${INSTALL_PATH}/../old_installation/test.xml" 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> |
...
- jarfile
The jar file path to read from. - zipfile
The zip file path to read from. - type := "
options
" | "ini
" | "xml
" (optional, defaults to "options
")
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 | ||||||
---|---|---|---|---|---|---|
| ||||||
<dynamicvariables> <variable name="previous.version" jarfile="${INSTALL_PATH}/${INSTALL_SUBPATH}/libs/config.jar" entry="release.properties" type="options" key="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> |
...
- 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 | ||||||
---|---|---|---|---|---|---|
| ||||||
<dynamicvariables> <variable name="RegistryReadTest" checkonce="true" regkey="HKLMHKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment" regvalue="Path"/> </dynamicvariables> |
...
- 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 | |||||
---|---|---|---|---|---|
| |||||
| |||||
<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 | ||||||
---|---|---|---|---|---|---|
| ||||||
<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> |
...
Code Block | ||||
---|---|---|---|---|
| ||||
<dynamicvariables> <variable ... <!-- other nested arguments might go here --> <filters> <filter1 .../> <filter2 .../> ... <!-- more filters might go here --> </filters> </variable> </dynamicvariable> |
...
Regular Expression Filter
...
- 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 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 | ||||||
---|---|---|---|---|---|---|
| ||||||
<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="HKLMHKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment" regvalue="Path"> <filters> <regex regexp="([^;]*)(.*)" select="\1" defaultValuedefaultvalue="(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="HKLM\HKEY_LOCAL_MACHINE\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment" regvalue="Path"> <filters> <regex regexp="([^;]*)" replace="+++ \1 +++" defaultValuedefaultvalue="(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.
...
Code Block | ||||
---|---|---|---|---|
| ||||
<dynamicvariables> <variable name="previous.wrapper.java.command.canonical" value="${previous.wrapper.java.home.canonical}/bin/java" condition="haveInstallPath+isCompatibleUpgrade+haveWrapperJavaCmd+isSetCanonicalJavaHome"> <filters> <location basedir="${INSTALL_PATH}"/> </filters> </variable> </dynamicvariables> |
CaseStyle Case Style Filter
Sometimes you need a variable value with all lowercase or all uppercase. This filter is proposed for inclusion 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 | language | html/xml|
---|---|---|
| ||
<dynamicvariables> <variable name="var1" value="Some Text" > <filters> <casestyle<case style="lowercaselower"/> </filters> </variable> <variable name="var2" value="${var1}" > <filters> <casestyle<case style="uppercaseupper"/> </filters> </variable> </dynamicvariables> |
...