当前位置: 首页 > 知识库问答 >
问题:

如何为Java程序创建MSI Windows安装程序?

穆鸿波
2023-03-14
  • Java运行时环境(OpenJDK 1.7 JRE)
  • 脚本(.bat)
  • 一个胖罐子
  • 图标文件
  • 一些文本文件

我不想使用系统的JRE,这就是我提供另一个JRE的原因。该脚本只使用几个参数调用JRE。图标文件为.ico格式。fat JAR是包含所有必需的Java类、本机库和资产(包括第三方库)的JAR。

我想允许最终用户安装、运行和卸载我的程序。我想在“开始”菜单中提供一个快捷方式来运行它,另一个快捷方式来卸载它。这里似乎有解释。我必须使用其他任何东西来创建卸载我的程序的快捷方式吗?

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Product Id="*" Name="Truly Unusual Experience of Revolution" Language="1033" Version="0.0.0.0" Manufacturer="Julien Gouesse" UpgradeCode="00000000-0000-0000-0000-000000000000">
    <!-- Installer's Icon in Add/Remove Programs -->
	<Icon Id="icon.ico" SourceFile="tuerLogo.ico"/>
    <Property Id="ARPPRODUCTICON" Value="icon.ico" />
	<!-- Installer's version = 200 because the 64-bit support is required -->
    <Package InstallerVersion="200" InstallPrivileges="elevated" InstallScope="perMachine" Compressed="yes" Platform="x64" />
    <Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />
    <MajorUpgrade AllowDowngrades="yes" IgnoreRemoveFailure="yes" Schedule="afterInstallInitialize" />
    <Condition Message="This application is only supported on Windows XP, Windows Vista, Windows Server 2008, or higher.">
      <![CDATA[Installed OR (VersionNT >= 501)]]>
    </Condition>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="APPLICATIONROOTDIRECTORY" Name="Truly Unusual Experience of Revolution">
		  <Component Id="tuer.bat" Guid="00000000-0000-0000-0000-000000000000">
            <File Id="tuer.bat" Source="tuer.bat" KeyPath="yes"/>
		  </Component>
		  <Component Id="tuer.jar" Guid="00000000-0000-0000-0000-000000000000">
            <File Id="tuer.jar" Source="tuer.jar" KeyPath="yes"/>
		  </Component>
		  <Component Id="LICENSE.txt" Guid="00000000-0000-0000-0000-000000000000">
            <File Id="LICENSE.txt" Source="LICENSE.txt" KeyPath="yes"/>
		  </Component>
		  <Component Id="NOTICE.txt" Guid="00000000-0000-0000-0000-000000000000">
            <File Id="NOTICE.txt" Source="NOTICE.txt" KeyPath="yes"/>
		  </Component>
		  <Component Id="README.txt" Guid="00000000-0000-0000-0000-000000000000">
            <File Id="README.txt" Source="README.txt" KeyPath="yes"/>
		  </Component>
		</Directory>
      </Directory>
	  <Directory Id="ProgramMenuFolder">
        <Directory Id="ApplicationProgramsFolder" Name="Truly Unusual Experience of Revolution"/>
      </Directory>
	</Directory>
	<!-- Shortcut in the Start Menu -->
	<DirectoryRef Id="ApplicationProgramsFolder">
      <Component Id="ApplicationShortcut" Guid="00000000-0000-0000-0000-000000000000">
        <Shortcut Id="ApplicationStartMenuShortcut" 
                  Name="Truly Unusual Experience of Revolution" 
                  Description="First person shooter"
                  Target="[#tuer.bat]"
                  WorkingDirectory="APPLICATIONROOTDIRECTORY"
			      Icon="icon.ico" />
          <RemoveFolder Id="ApplicationProgramsFolder" On="uninstall"/>
          <RegistryValue Root="HKCU" Key="Software\Microsoft\TrulyUnusualExperienceofRevolution" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
      </Component>
    </DirectoryRef>
    <Feature Id="TrulyUnusualExperienceofRevolution" Title="Truly Unusual Experience of Revolution" Level="1">
	  <ComponentRef Id="tuer.bat" />
	  <ComponentRef Id="tuer.jar" />
	  <ComponentRef Id="LICENSE.txt" />
	  <ComponentRef Id="NOTICE.txt" />
	  <ComponentRef Id="README.txt" />
	  <ComponentRef Id="ApplicationShortcut" />
	</Feature>
  </Product>
</Wix>

edit.2:这是在JRE目录上运行“heat”获得的文件。

注:我没有回答我自己的问题,但当我发现用NSIS(Nullsoft Scriptable Install System)构建安装程序会容易得多时,我就停止了调查,因为已经有一个Ant任务和几个GNU Linux发行版(包括Mageia、Fedora等)的一些包可以使它工作。您可以找到一个名为Java Launcher的脚本,用于在软件和操作系统中查找JRE(尽管我建议您在软件中捆绑一个OpenJDK JRE,以确保它在操作系统中没有JRE的情况下仍能继续工作)、另一个具有自动JRE安装功能的脚本以及一个用于基于Java的软件的nsi脚本的基本示例。

附:顺便说一下,我现在使用我自己的工具(它在引擎盖下使用Redline RPM),它是完整的文档化的,开源的(在GPL下),也适用于RPM、DEB、APP和EXE(通过NSIS),它叫做Java原生部署工具包。

共有1个答案

公冶经纶
2023-03-14

来自OpenJDK project for Java8/9的javapackager包含了打包MSI安装程序的能力(使用WIX),这些安装程序包括已安装应用程序的自定义JRE安装。如果您不希望使用Oracle Java提供的打包器或从OpenJDK源代码编译的打包器,那么查看javapackager源代码可能会帮助您创建自己的打包实用程序。

许可似乎是您关心的问题--所以如果您采用这种方式,您可以检查OpenJDK法律文档是否适合您的情况。请注意,如果使用OpenJDK,Oracle BCL是不适用的。

我没有详细检查javapackager源代码,但它可能对Java8特性有一些依赖。由于您的目标是创建一个基于JRE7的包,您可能可以使用Java8运行时执行打包器,但将Java7 JRE打包为目标。如果您必须使用Java7运行时运行打包工具,并且打包程序代码使用Java8特性--您可以将其分叉并后端到Java7(您需要一些非常严格的要求来要求这一点--大多数人不会有这样的要求)。

 类似资料:
  • 我知道这个问题已经被问过很多次了,一直都有一个答案是关于使用一个可执行的jar或制作一个。exe使用launch4j或类似应用程序。 我可能听起来像个新手,实际上我是。 我一直在用一个Java项目尝试一些东西。我已经成功地制作了一个可执行的jar和一个. exe文件。这都要归功于你之前在SO中的回答:) 但是,我想为Windows创建一个安装程序。例如,按Next 2-3次(显示所有条款和条件等)

  • 问题内容: 我知道这个问题已经被问过很多次了,而且一直有一个答案说明使用可执行jar或使用launch4j或类似应用程序制作.exe。 我听起来像是一个新手,实际上是我。 我一直在尝试Java项目中的一些事情。我已经成功地制作了一个可执行的jar和一个.exe文件。非常感谢您之前在SO中的回答:) 但是,我想为Windows创建一个安装程序。像是,按下一步2至3次(显示所有条款和条件等),然后用户

  • 问题内容: 我正在将中型Java应用程序的构建从Ant迁移到Maven。我可以轻松迁移基本的构建内容,但是我也想从Maven构建中创建安装程序包。最简单的方法是通过Ant插件调用原始的Ant脚本,但我想也许我应该先看看Maven的支持。 我需要为不同的平台创建几个不同的安装程序: Windows 32/64位 Linux 32/64位 MacOS 32/64位 现在对于Linux,我认为我们只有一

  • 我使用jpack打包了我的java应用程序。当我使用打包的安装程序安装它时,安装后的目录始终是

  • 今天,我需要一个解决方案来避免在修补程序安装的上下文中通过install4j Version6.1.3创建安装目录。我编写了一个安装程序,其中包含一些文件来将它们安装到现有的应用程序安装中。这些文件应该与修补程序安装程序捆绑在一起。在install files操作中,我停用了install运行时选择点,但安装程序仍然创建了包含名为.install4j的文件夹的安装目录。在这个文件夹中只有一些ins

  • 我有一个程序,我想能够很容易地安装由任何用户,我认为创建一个本机安装程序是走的路。我使用了Netbeans 8.0的功能(Project properties>Enable native packaging,Package as)。我能够创建一个工作的本地安装程序。安装后,我有以下文件树: 从project.jar执行程序起作用。但是,当我尝试启动Project.exe时,在一个没有任何详细信息的