2011-12-17 27 views
1

我有一个基于Web的UI(使用Vaadin框架)的Java应用程序。 我希望用户获得应用程序并在其本地机器上运行。有些用户可能不是很技术性,所以需要尽可能简单和简单地使用它们。BKM为最终用户提供基于Web的Java应用程序+ Jetty + JRE

可能的解决方案:

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

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

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

到目前为止,假设JWS可以做我所需要的,那么对于大多数用户来说,选项2看起来最容易。

所以,我的问题是:

  • 你使用这些解决方案3看到哪些附加的陷阱?
  • 在我的情况下,你更喜欢哪一个?

回答

0

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

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