代码之家  ›  专栏  ›  技术社区  ›  finnw

Actudio4J与Java Web启动的结合?

  •  8
  • finnw  · 技术社区  · 14 年前

    我有一个运行中的JNLP应用程序,需要将其分发给各种非技术性的最终用户。

    如果用户的机器安装了最新的JVM,那么一切都很好。他们只需双击我发送的JNLP文件,JavaWebStstart就可以完成剩下的工作。

    现在,我想发布一些可以使用或不使用JVM的东西,例如 .exe 如果不存在兼容的JVM,则自动下载该文件,然后调用 javaws.exe 下载.jar文件并启动应用程序。

    launch4j是我找到的最接近的匹配项,但它无法通过 JavaW.EXE . 唯一的选择是 java javaw

    我想要一种可以:

    • 生成一个独立的 exe 不需要预先安装JVM的文件
    • 解析 .jnlp 文件,并确定正确的JVM下载(如果需要的话,我知道JavaWebSstart可以下载JVM,但我希望避免下载两个,第一个是引导Java Web启动,第二个是运行应用程序,这可能需要一个特定但不同的JVM)。
    • 自动下载和安装JVM, 只需将用户引导到Java下载页面或打开新安装向导即可。
    • 如有必要,提示输入管理员密码(以获取安装JVM的权限)。我认为这不是Sun JVM安装程序内置的。)
    • 只显示一个安全对话框(我只想提示用户一次,以确认他们信任生成的 exe ,但我不希望第二个提示确认他们信任 .jar 来自同一个源并用同一个证书签名的文件。)我认为这需要自动下载器在启动JWS之前安装该证书。)
    • (不重要)下载应用程序资源(例如 罐子 文件)。这将要求在安装JVM之前运行缓存,因此必须使用本机代码和 DownloadService 稍后将使用JNI与它接口。

    这样的产品存在吗?我怀疑不是,但值得一试。


    更新 我发现 this article 它可以解决一些相关的问题,虽然它是为离线安装而设计的,我主要关注在线安装。

    6 回复  |  直到 9 年前
        1
  •  2
  •   Thomas    14 年前

    我也遇到了同样的问题。最后我得到了一个球棒,一个弹壳,最后得到了一个用于Mac的DMG。

    我在使用NullSoft安装程序为Windows自动安装JRE时发现了以下注释:

    http://nsis.sourceforge.net/Java_Launcher_with_automatic_JRE_installation

    我认为在JNLP之外,你会发现很难实现所有平台的自动化。然而,在我的项目中,长达两年的时间里,我没有看到用户必须自己获取Java的抱怨。我相信大多数机器已经有了它。Windows用户抱怨没有快捷方式,但使用vbs很容易。

    同样在mac dmg-appbundle上,它们是指定JRE的方法。Mac将拥有最新版本,除非是基于PowerPC的旧机器。在这种情况下,没有Java6。

    其中有几个启动程序,我建议使用自动更新策略。

        2
  •  4
  •   Marvin Pinto    13 年前

    我可以在生产中使用它。

    编写一个简单的引导类,jar它,并启动jar。

    下面是简单引导类的主要功能:

    public static void main(String[] args) {
      try {     
        final File jnlp = File.createTempFile("temp", ".jnlp");
        final URL url = new URL("http://yourjnlp-wherever-youre-hostingit.jnlp");
        yourCopyStreamMethodYouWrote(url.openStream(),new FileOutputStream(jnlp));
        Desktop.getDesktop().open(jnlp);
      } catch (final Throwable t) { 
         // do something useful here
      }
    }
    
        3
  •  2
  •   ddimitrov    14 年前

    您也可以考虑使用Excelsior Jet编译您的项目。除了所有其他因素,它还创造了一个合理规模的自给自足的分布。

        4
  •  0
  •   Thorbjørn Ravn Andersen    14 年前

    另一种方法也可能是分发一个带有.bat文件的Sun JRE,用/s开关调用它,这会导致静默安装。

    我还没有看到任何其他的东西来允许一个完全无声的Java安装和调用JavaWS相结合。

        5
  •  0
  •   kohlerfc    14 年前

    好吧,我知道你想做什么,但你为什么不想使用javaws呢?Apple的Java4J看起来是一个不错的选择,因为它允许安装JAVA文件,因为它允许无缝使用JAR文件。

    Javaws或多或少使用具有安全权限和一些启动选项的java.exe。但是,如果使用用户信任的证书,则可以禁用安全权限。

    我也不确定JavaW何时被引入,但是我确信它在Java 1.5中是可用的,我在EOL附近。所以,除非你的用户多年来没有安装Java,否则我怀疑让他们启动JNLP是个问题。即使它们运行的是旧版本,也可以向JNLP添加所需的Java版本,这将仅为该应用程序自动下载。

        6
  •  0
  •   driu    9 年前

    虽然不是免费的非商业用途, Install4j 为Java应用程序提供本地安装程序系统。支持JRE绑定。我不确定它是否可以自动解析JNLP,但它可能是值得检查的东西。

    作为示例用例,基于Java Integrated Genome Browser 使用此工具生成的安装程序分发。查看其安装4J configuration file .