Install4j-安装程序变量的UndefinedVariableException
我知道出现了一个错误,但当安装程序在Linux环境下运行时(在windows上运行正常),我似乎仍然会遇到这个错误。 我使用的是v6.1.6[build:6459] 我想做的是:Install4j-安装程序变量的UndefinedVariableException,install4j,Install4j,我知道出现了一个错误,但当安装程序在Linux环境下运行时(在windows上运行正常),我似乎仍然会遇到这个错误。 我使用的是v6.1.6[build:6459] 我想做的是: 我定义了一个设置变量操作,在该操作中,如果存在$JAVA_HOME路径,则获取该路径,并将其设置为linuxJavaHome变量 稍后-我定义了Run executable或batch file操作,在该操作中,我使用安装程序previouslinuxJavaHome变量获取java版本 我在多个Linux环境中检
设置变量
操作,在该操作中,如果存在$JAVA_HOME路径,则获取该路径,并将其设置为linuxJavaHome
变量Run executable或batch file
操作,在该操作中,我使用安装程序previouslinuxJavaHome
变量获取java版本设置变量屏幕上
异常stacktrace是:
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)
“设置变量”操作可能会设置空变量值,因为未定义环境变量JAVA\u HOME
。您可以选择该操作的“如果值为null,则失败”属性,以便更早地发现此问题。最后,对我有效的方法是忽略$JAVA_HOME变量的使用,而使用安装程序内部变量${installer:sys.javaHome}
这在Linux和Windows上都非常有效。您可以发布异常的堆栈跟踪吗?当然可以。我把它贴到了我原来的帖子上,因为我不能把它作为评论(太长)来添加。谢谢,我尝试了这个选项,但是失败了,并显示了错误消息。我不明白为什么。我们所有的Linux机器都有JAVA_HOME变量。也许有另一种获取Linux环境的方法,而不是通过System.getenv?我看不到任何其他方法。调用过程可能不会传递环境变量。是否有任何方法可以通过install4j使用Linux语法,如locate java命令?是的,您可以使用“Run executable”操作来执行它并将输出保存到安装程序变量。但是,该可执行文件也将具有错误的环境变量,因为它们是继承的。如果您通过/bin/sh
执行它,可能会从原始环境变量开始。或者我会看看安装程序的调用,也许有一个选项可以传递所有环境变量,或者您可以指定一个值为JAVA_HOME的参数,您可以在安装程序中使用。再次感谢您的回答。关于你写的第二段-你是说将变量定义为“预定义”变量吗?您认为在这种情况下,它是否有助于以后设置变量?