BKM向最终用户提供基于Web的Java应用程序+ Jetty + JRE

时间:2011-12-17 00:59:55

标签: java web-applications vaadin java-web-start launch4j

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

可能的解决方案:

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

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

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

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

    所以,我的问题是:

    • 您对这三种解决方案有哪些额外的缺陷?
    • 在我的情况下你更喜欢哪一个?

1 个答案:

答案 0 :(得分:0)

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

  • 首先,使用嵌入式Jetty构建一个运行webapp的jar。这个jar必须有一个主类(启动一个嵌入式Jetty)和一个配置了“Main-Class”属性的MANIFEST.MF,所以这个jar可以运行:“java -jar myEmbeddedWebApp.jar”。
  • 然后,使用launch4j为该jar构建一个exe包装器,例如myEmbeddedWebApp.exe