1

我有一个带有基于 Web 的 UI 的 Java 应用程序(使用 Vaadin 框架)。我希望用户获取该应用程序并在他们的本地计算机上运行。一些用户可能不是很技术,所以需要使这对他们来说尽可能简单和万无一失。

可能的解决方案:

  1. 使用 webapp + Jetty + 批处理和 shell 脚本创建一个分布式以启动应用程序。也许也包括 JRE。用户故事将是:下载一些 ZIP 文件,解压缩并运行“start.bat”或“start.sh”。该脚本将启动 Jetty,并可能使用“http://localhost:8080/myapp” URL 启动 Web 浏览器。“安装 JRE”或“你的 Java Home 是什么”或“你的 JRE 太旧”等应该没有什么魔法……这会吓坏许多非技术人员。这里的难点:如果机器没有JRE怎么办?我想避免使用 JRE(对于 Win/Linux/MacOS)创建 3 个不同的分布。将所有 3 个 JRE 打包到同一个分发包中似乎有点过头了。

  2. 我看到的另一种方法是使用 Java Web Start。我的应用程序将通过 JWS 以 Jetty JAR 作为依赖项下载,并在这种情况下启动嵌入式 Jetty。用户故事:单击某个网站上的按钮以在本地启动应用程序。我记得大约 5 年前从代理后面使用 JWS 时遇到问题:无法加载依赖项。不确定它是否仍然是一个问题。从那以后我就没有用过JWS,所以我很熟悉它。JWS 的另一个问题是,它需要人们连接互联网才能启动应用程序(至少是第一次或可能每次),这并不总是可行的(一些组织无法连接到互联网)。AFAIK,最后一个 JWS 建议安装 JRE(如果还没有的话),所以这对最终用户来说应该很容易。那'

  3. 最后,最后一种方法是使用诸如 launch4j 或 InstallShield 之类的东西打包所有内容。希望这些程序能够安装 JRE,如果它还不存在,并且还可以在无头模式下运行(对于服务器)。

到目前为止,对于大多数用户来说,选项 2 看起来是最简单的,假设 JWS 可以满足我的需要。

所以,我的问题是:

  • 您认为这 3 个解决方案还有哪些额外的陷阱?
  • 在我的情况下,你更喜欢哪一个?
4

1 回答 1

0

我更喜欢解决方案 1 和 3 的组合。我的意思是:

  • 首先,构建一个带有嵌入式 Jetty 的 jar 来运行您的 web 应用程序。这个 jar 必须有一个主类(启动一个嵌入式 Jetty)和一个配置有“Main-Class”属性的 MANIFEST.MF,所以这个 jar 可以运行:“ java -jar myEmbeddedWebApp.jar”。
  • 然后,使用 launch4j 为该 jar 构建一个 exe 包装器,例如 myEmbeddedWebApp.exe
于 2012-03-31T16:20:21.930 回答