I'm trying开发者_Go百科 to figure out how to have IzPack replace variables in text files. It seems like it should be a simple thing but I can't find a specific example of doing this with their existing documentation.
Any ideas?
Thanks in advance.
I assume that the file to be processed is added to one of the packs using file or fileset tag. In order for that file to be processed, which happens just at the end of the installation process, it is necessary to add the parsable tag for the file to the same pack. For example
<packs>
<pack name="Base" required="yes">
<description>Application and all its dependencies.</description>
<fileset dir="dependencies" targetdir="$INSTALL_PATH/dependencies" />
<file src="Licence.txt" targetdir="$INSTALL_PATH" />
<file src="application.properties" targetdir="$INSTALL_PATH/dependencies" />
<file src="run.bat" targetdir="$INSTALL_PATH" os="windows" />
<file src="run.sh" targetdir="$INSTALL_PATH" os="unix" />
<parsable targetfile="$INSTALL_PATH/run.bat" os="windows" />
<parsable targetfile="$INSTALL_PATH/run.sh" os="unix" />
<parsable targetfile="$INSTALL_PATH/dependencies/application.properties" />
</pack>
</packs>
There are three parsable tags in the above example -- two OS dependent, and one OS independent. The target files are first copied to corresponding target directories specified in the respective file tags and then processed by substituting variable names in the files with their values.
Building on 01es' answer this is an example where you let the user choose a path for the application's data using the UserInputPanel and then write that path to a config file inside the installation directory for your application to read.
The example config.xml
that contains variables you want to substitute:
<?xml version="1.0" encoding="UTF-8"?>
<Entries>
<Entry>
<Key>appDataDir</Key>
<!-- IzPack will substitute this -->
<Value>$appDataDir</Value>
</Entry>
</Entries>
userInputSpec.xml:
<userInput>
<panel id="panel1">
<field type="dir" variable="appDataDir">
<spec size="20" set="$USER_HOME\AppData\Roaming\$APP_NAME" mustExist="false" create ="true"/>
<os family="windows"/>
</field>
</panel>
</userInput>
installer.xml:
<?xml version="1.0" encoding="UTF-8"?><installation version="1.0">
<info>
<appname>Your app</appname>
<appversion>0.0.1</appversion>
<!-- Try to run as the administrator on Windows to be able to install under "C:\Program Files" -->
<run-privileged condition="izpack.windowsinstall" />
</info>
<locale>
<langpack iso3="eng" />
</locale>
<resources>
<res id="userInputSpec.xml" src="userInputSpec.xml" parse="yes" type="xml" />
</resources>
<panels>
<panel classname="UserInputPanel" id="panel1" />
<panel classname="InstallPanel" />
<panel classname="FinishPanel" />
</panels>
<packs>
<pack name="Core" id="core.package" required="yes">
<description>The base files that need to be part of the app</description>
<!-- The runnable application should be in this directory -->
<fileset dir="YourAppDir" targetdir="$INSTALL_PATH/YourAppDir">
<include name="**" />
</fileset>
<!-- This file contains placeholder variables starting with $ that Izpack substitutes with values that the user enters during installation in the UserInputPanel -->
<parsable targetfile="$INSTALL_PATH/YourAppDir/config.xml" />
</pack>
</packs>
</installation>
精彩评论