Reputation: 1140
I know there has been a bug on this subject, but it seems I'm still getting this error when the installer running on Linux environment (on windows it working fine). I'm using v6.1.6 [build: 6459]
What I tried to do:
Set a variable
action in which I'm getting the $JAVA_HOME path if exists and set it to linuxJavaHome
variable.Run executable or batch file
action in which I'm getting the java version using the installer previous linuxJavaHome
variable.I checked my code on multiple Linux environments and the variable is defined just fine with the java home path. Moreover, I've also tried debugging my code to be sure and it seems OK.
My only problem is when I'm building and running our installer from JENKINS with silent mode (-q), I'm always getting this UndefinedVariableException. I refined the problematic point and it happens on the 1st Set a variable
screen.
The exception stacktrace is:
com.install4j.api.beans.UndefinedVariableException: installer:linuxJavaHome
13:03:08 Error log: /home/administrator/installer/install4jError2195873440024941405.log
13:03:08 com.install4j.api.beans.UndefinedVariableException: installer:linuxJavaHome
13:03:08 at com.install4j.runtime.installer.InstallerVariables$InstallerReplacementCallback.handleError(InstallerVariables.java:971)
13:03:08 at com.install4j.runtime.installer.InstallerVariables$InstallerReplacementCallback.getReplacement(InstallerVariables.java:950)
13:03:08 at com.install4j.runtime.util.StringUtil.replaceVariable(StringUtil.java:68)
13:03:08 at com.install4j.runtime.installer.InstallerVariables.replaceVariables(InstallerVariables.java:337)
13:03:08 at com.install4j.runtime.installer.InstallerVariables.replaceVariables(InstallerVariables.java:326)
13:03:08 at com.install4j.runtime.installer.InstallerVariables.replaceVariables(InstallerVariables.java:322)
13:03:08 at com.install4j.runtime.installer.InstallerVariables.replaceVariables(InstallerVariables.java:362)
13:03:08 at com.install4j.api.beans.AbstractBean.replaceVariables(AbstractBean.java:89)
13:03:08 at com.install4j.runtime.beans.actions.misc.RunExecutableAction.getExecutable(RunExecutableAction.java:58)
13:03:08 at com.install4j.runtime.beans.actions.misc.RunExecutableAction.execute(RunExecutableAction.java:292)
13:03:08 at com.install4j.runtime.beans.actions.SystemInstallOrUninstallAction.install(SystemInstallOrUninstallAction.java:29)
13:03:08 at com.install4j.runtime.installer.ContextImpl$7.executeAction(ContextImpl.java:1668)
13:03:08 at com.install4j.runtime.installer.ContextImpl$7.fetchValue(ContextImpl.java:1659)
13:03:08 at com.install4j.runtime.installer.ContextImpl$7.fetchValue(ContextImpl.java:1656)
13:03:08 at com.install4j.runtime.installer.helper.comm.actions.FetchObjectAction.execute(FetchObjectAction.java:14)
13:03:08 at com.install4j.runtime.installer.helper.comm.HelperCommunication.executeActionDirect(HelperCommunication.java:274)
13:03:08 at com.install4j.runtime.installer.helper.comm.HelperCommunication.executeActionInt(HelperCommunication.java:259)
13:03:08 at com.install4j.runtime.installer.helper.comm.HelperCommunication.executeActionChecked(HelperCommunication.java:187)
13:03:08 at com.install4j.runtime.installer.helper.comm.HelperCommunication.fetchObjectChecked(HelperCommunication.java:170)
13:03:08 at com.install4j.runtime.installer.ContextImpl.performActionIntStatic(ContextImpl.java:1656)
13:03:08 at com.install4j.runtime.installer.InstallerContextImpl.performActionInt(InstallerContextImpl.java:151)
13:03:08 at com.install4j.runtime.installer.ContextImpl.performAction(ContextImpl.java:1103)
13:03:08 at com.install4j.runtime.installer.controller.Controller.executeAction(Controller.java:368)
13:03:08 at com.install4j.runtime.installer.controller.Controller.executeActions(Controller.java:334)
13:03:08 at com.install4j.runtime.installer.controller.Controller.executeActionGroup(Controller.java:405)
13:03:08 at com.install4j.runtime.installer.controller.Controller.executeActions(Controller.java:339)
13:03:08 at com.install4j.runtime.installer.controller.Controller.executeActionGroup(Controller.java:405)
13:03:08 at com.install4j.runtime.installer.controller.Controller.executeActions(Controller.java:339)
13:03:08 at com.install4j.runtime.installer.controller.Controller.handleCommand(Controller.java:195)
13:03:08 at com.install4j.runtime.installer.controller.Controller.handleStartup(Controller.java:116)
13:03:08 at com.install4j.runtime.installer.controller.Controller.start(Controller.java:73)
13:03:08 at com.install4j.runtime.installer.Installer.runInProcess(Installer.java:59)
13:03:08 at com.install4j.runtime.installer.Installer.main(Installer.java:46)
13:03:08 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
13:03:08 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
13:03:08 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
13:03:08 at java.lang.reflect.Method.invoke(Method.java:498)
13:03:08 at com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:65)
13:03:08 at com.install4j.runtime.launcher.UnixLauncher.main(UnixLauncher.java:57)
Upvotes: 2
Views: 3716
Reputation: 1140
In the end what was working for me was neglecting the use of the $JAVA_HOME variable and using the installer inner variable ${installer:sys.javaHome}
which works great both on Linux & Windows.
Upvotes: 2
Reputation: 48105
The "Set a variable" action probably sets a null variable value because the environment variable JAVA_HOME
is not defined. You can select the "Fail if value is null" property of that action to catch this problem earlier.
Upvotes: 0