Nimrod
Nimrod

Reputation: 1140

Install4j - UndefinedVariableException for installer variable

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:

  1. I defined a Set a variable action in which I'm getting the $JAVA_HOME path if exists and set it to linuxJavaHome variable.

enter image description here

  1. Later on - I defined Run executable or batch file action in which I'm getting the java version using the installer previous linuxJavaHome variable.

enter image description here

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.

enter image description here

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

Answers (2)

Nimrod
Nimrod

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

Ingo Kegel
Ingo Kegel

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

Related Questions