我是新来的Java编程,但我基本熟悉了如何一切正常。 我希望能够把两个jar文件和JRE到一个Windows可执行文件(exe文件),所以,当我分发,客户端无需安装了JRE。 我应该使用什么程序?
我已经launch4j,似乎做我想要什么,但是当我尝试运行应用程序,我得到“该应用程序被配置为使用捆绑的Java运行时环境,但运行时丢失或损坏。”
我想我的应用程序仅仅是一个可运行的exe文件,而不是一个安装程序。 最起码,谁能告诉我如何正确地捆绑与launch4j一个JRE?
我是新来的Java编程,但我基本熟悉了如何一切正常。 我希望能够把两个jar文件和JRE到一个Windows可执行文件(exe文件),所以,当我分发,客户端无需安装了JRE。 我应该使用什么程序?
我已经launch4j,似乎做我想要什么,但是当我尝试运行应用程序,我得到“该应用程序被配置为使用捆绑的Java运行时环境,但运行时丢失或损坏。”
我想我的应用程序仅仅是一个可运行的exe文件,而不是一个安装程序。 最起码,谁能告诉我如何正确地捆绑与launch4j一个JRE?
我可以捆绑一个JRE的唯一方法是使用Launch4J和Inno Setup的编译器 。
首先,创建一个jre6
在同一个目录文件夹(例如)作为输出文件(.exe)。
然后从系统中复制JRE到你JRE6文件夹。
然后,你打开Launch4J并设置捆绑的JRE路径 -只要输入jre6
。 然后单击生成按钮(当然,您输入的所有其它参数之后-但你需要JRE选项卡本身进入唯一的价值是捆绑的JRE路径值。)
我本来期望的是工作,但如果你再移动.exe文件到新的位置(所以它不再是协同定位与JRE6文件夹),你得到的这个应用程序被配置为使用捆绑的Java运行时环境,但当您尝试运行该应用程序运行时丢失或损坏错误...
我整天都在玩弄这一点,没有办法,我能得到Launch4J包括了JRE中的.exe文件。 在我看来,真正的穷人,因为他们的文件似乎并没有暗示这个问题的。
所以我做了什么来解决是使用Inno Setup的编译器(ISC)。 这个程序是用来包住您的.exe为Windows Installer文件。 所以我增加了一个设置在ISC脚本复制到JRE的安装包。 我添加到脚本的线(在[Files]
段)为:
Source: "M:\Netbeans\MyApp\jre6\*"; DestDir: "{app}\jre6\"; Flags: recursesubdirs createallsubdirs
...有点变通方法,但它的伎俩。
重复上述所有步骤,你应该进行排序。
我从来没有使用Launch4J产品,好运气得到它正确配置。
看起来你也许可以去论坛Sourceforge上其他提示这里
其它建议:
大多数我从IBM(的Websphere)和Oracle看到的产品只是解压缩安装目录下的JRE和配置启动批处理命令使用已安装JRE。 本质上,JRE和JAR文件将被安装在一杆。
安装exe文件通常会检查是否已安装,并跳过这一步,如果发现它已经存在。 这是刚刚jar文件的升级有用。
具有本地安装也解决了客户的安装自己的JRE的问题,它可能不兼容或包含错误。 这样,你的处理与已知的JRE版本。
Excelsior酒店的路线是确定的,如果你没有一个图形组件到应用程序(它已经有一段时间,该限制可能有变化)。 还有其他的限制,同时,但你可能只是关闭只是在一个单一的可执行安装程序分发JRE与您的代码更好。
看来你需要本地代码编译器。 这些编译器产生本地代码不需要JRE。
检查这篇文章- https://www.excelsior-usa.com/articles/java-to-exe.html#aot 。
它很容易捆绑JRE到launch4j ..
只是JRE复制到相同的输出文件夹
在包JRE环境文本框中,只是给了JRE文件夹本身
在环境变量文本框(存在于下同页),给直到斌
然后创建EXE ..它按预期工作没有机器JRE。
谢谢
捆绑JRE解决方案Inno Setup的
为了实现与应用程序的jar捆绑JRE的解决方案,我创建了一个Inno Setup的脚本:
1)复制JRE入安装的exe
2)执行终端命令的当量:Java的罐子myjar.jar使用捆绑JRE
首先,我复制JRE:
#define MyJREPath "C:\Program Files\Java\jre1.8.0_191"
[Files]
Source: "{#MyJREPath}\*"; DestDir: "{app}\runtime\jre\"; \
Flags: ignoreversion recursesubdirs createallsubdirs;
我按照显示的目录结构,约定在这里: https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/self-contained-packaging.html
要运行Java的罐子myjar.jar相当于:
[Run]
Filename: "{app}\runtime\jre\bin\javaw.exe"; Parameters: " -jar myjar.jar"; \
WorkingDir: "{app}\app\"; \
Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; \
Flags: postinstall skipifsilent
(NB的java.exe与终端运行并javaw.exe的无终端运行)
桌面快捷方式需要有正确的文件名,参数和工作目录:
[Icons]
Name: "{commondesktop}\{#MyAppName}"; \
IconFilename: "{app}\app\{#MyAppIcoName}"; \
Filename: "{app}\runtime\jre\bin\javaw.exe"; \
Parameters: " -jar myjar.jar"; \
WorkingDir: "{app}\app\"; \
Tasks: desktopicon
[Tasks]
Name: "desktopicon"; \
Description: "{cm:CreateDesktopIcon}"; \
GroupDescription: "{cm:AdditionalIcons}"; \
Flags: unchecked
有关锦上添花,为了让我的脚本处理这两个捆绑的JRE并没有捆绑选项我使用预处理IF语句(在每个脚本部分重复)来测试脚本是否有一个空MyJREPath与否。 如果MyJREPath不为空的,因此需要一个捆绑的JRE溶液我使用上面的编码; 可替代地,如果不需要捆绑溶液然后我使用更多的“正常”编码所示的创新安装实施例或可以通过向导生成。 这里的IF语句:
#if MyJREPath != ""
; bundled JRE required
#else
; bundled JRE not required
#endif
这里最我的脚本放在一起:
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
; some more #defines here
#define MyAppExeName "javaw.exe"
#define MyJREPath "C:\Program Files\Java\jre1.8.0_191"
;#define MyJREPath ""
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId=XXXXXXXXXX
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
DefaultGroupName={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyDefaultDirName}
DisableProgramGroupPage=yes
LicenseFile={#MyInnoSetupDir}\system\{#MyLicenseFile}
OutputDir={#MyInnoSetupDir}
#if MyJREPath != ""
; run app with bundled JRE
OutputBaseFilename={#MyAppName}-{#MyAppVersion}-bundledJRE-setup
#else
; run app without bundled JRE
OutputBaseFilename={#MyAppName}-{#MyAppVersion}-setup
#endif
SetupIconFile={#MyInnoSetupDir}\{#MyAppIcoName}
Compression=lzma
SolidCompression=yes
AppComments={#MyAppName}
AppCopyright={#MyAppCopyright}
UninstallDisplayIcon={#MyInnoSetupDir}\{#MyAppIcoName}
UninstallDisplayName={#MyAppName}
WizardImageStretch=No
WizardSmallImageFile={#MyInnoSetupDir}\{#MyAppBmpName}
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
;Name: "german"; MessagesFile: "compiler:Languages\German.isl"
[Tasks]
Name: "desktopicon"; \
Description: "{cm:CreateDesktopIcon}"; \
GroupDescription: "{cm:AdditionalIcons}"; \
Flags: unchecked
Name: "quicklaunchicon"; \
Description: "{cm:CreateQuickLaunchIcon}"; \
GroupDescription: "{cm:AdditionalIcons}"; \
Flags: unchecked; OnlyBelowVersion: 0,6.1
[Files]
; bundle JRE if required
#if MyJREPath != ""
Source: "{#MyJREPath}\*"; DestDir: "{app}\runtime\jre\"; \
Flags: ignoreversion recursesubdirs createallsubdirs;
#endif
; copy jar and all files
Source: "{#MyInnoSetupDir}\*"; DestDir: "{app}\app\"; \
Flags: ignoreversion recursesubdirs createallsubdirs
[Icons]
#if MyJREPath != ""
; set up icons with bundled JRE
Name: "{commonprograms}\{#MyAppName}"; \
IconFilename: "{app}\app\{#MyAppIcoName}"; \
Filename: "{app}\runtime\jre\bin\{#MyAppExeName}"; \
Parameters: " -jar {#MyJarName}"; \
WorkingDir: "{app}\app\"
Name: "{commondesktop}\{#MyAppName}"; \
IconFilename: "{app}\app\{#MyAppIcoName}"; \
Filename: "{app}\runtime\jre\bin\{#MyAppExeName}"; \
Parameters: " -jar {#MyJarName}"; \
WorkingDir: "{app}\app\"; \
Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; \
IconFilename: "{app}\app\{#MyAppIcoName}"; \
Filename: "{app}\runtime\jre\bin\{#MyAppExeName}"; \
Parameters: " -jar {#MyJarName}"; \
WorkingDir: "{app}\app\"; \
Tasks: quicklaunchicon
#else
; set up icons without bundled JRE
Name: "{commonprograms}\{#MyAppName}"; \
IconFilename: "{app}\app\{#MyAppIcoName}"; \
Filename: "{app}\app\{#MyJarName}"; \
WorkingDir: "{app}\app\"
Name: "{commondesktop}\{#MyAppName}"; \
IconFilename: "{app}\app\{#MyAppIcoName}"; \
Filename: "{app}\app\{#MyJarName}"; \
WorkingDir: "{app}\app\"; \
Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; \
IconFilename: "{app}\app\{#MyAppIcoName}"; \
Filename: "{app}\app\{#MyJarName}"; \
WorkingDir: "{app}\app\"; \
Tasks: quicklaunchicon
#endif
[Run]
#if MyJREPath != ""
; run app with bundled JRE
Filename: "{app}\runtime\jre\bin\{#MyAppExeName}"; Parameters: " -jar {#MyJarName}"; \
WorkingDir: "{app}\app\"; \
Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; \
Flags: postinstall skipifsilent
#else
; run app without bundled JRE
Filename: "{app}\app\{#MyJarName}"; \
WorkingDir: "{app}\app\"; \
Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; \
Flags: shellexec postinstall skipifsilent
#endif
希望这可以帮助。
该简单的方法来封装JRE到EXE,它lanch4j包装是使用包裹物。
warp-packer --arch windows-x64 --input_dir mycrt --exec run.bat --output single.exe
然后停止CMD窗口时推出的EXE。
editbin /subsystem:windows
经 : https://github.com/dgiagio/warp
EDITBIN:通过安装VS
演示:
什么你问是不是一件容易的事做(如果这是可行的。)如果我是你,我会考虑建立一个可执行的JAR文件:
Java的Eclipse中创建可执行的JAR
另一种选择是使用Java Web Start的。 这是假设你使用最新的浏览器的JNLP会自动提示用户安装Java的正确版本。
http://docs.oracle.com/javase/tutorial/deployment/webstart/index.html
有几个原因,launch4j不会平稳运行。 一些原因是:
1)用户不要运行该应用程序作为管理员
2)用户没有设置图标图像正常。 必须严格.ICO