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

标签 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 的另一个问题是,它需要人们有互联网连接才能启动应用程序(至少是第一次或可能每次),但这并不总是可行(某些组织无法连接到互联网)。 AFAIK,最后一个 JWS 建议安装 JRE(如果尚未安装),因此这对于最终用户来说应该很容易。 这可能就是 JWS 潜在问题的原因(?)。

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

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

所以,我的问题是:

  • 您认为这 3 种解决方案还有哪些其他缺陷?
  • 对于我的情况,您更喜欢哪一个?

最佳答案

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

  • 首先,构建一个带有嵌入式 Jetty 的 jar 来运行您的 Web 应用程序。该 jar 必须具有一个主类(启动嵌入式 Jetty)和一个使用“Main-Class”属性配置的 MANIFEST.MF,因此该 jar 可以使用以下命令运行:“java -jar myEmbeddedWebApp.jar”。
  • 然后,使用 launch4j 为该 jar 构建一个 exe 包装器,例如 myEmbeddedWebApp.exe

关于java - BKM 向最终用户提供基于 Web 的 java 应用程序 + Jetty + JRE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8541841/

相关文章:

Java:扩展类加载器在 Java 13 中从哪里获取类?

java - 本地小程序安全异常

java - 如何使用Java通过删除重复数据从列表中写入现有文件?

reactjs - ReactJS 应用程序中的配置文件

selection - Select UI/Vaadin 6.7.3 的 Property.valueChangeListener 的奇怪行为

java - runo 主题中的 styles.css 未加载

java - GWT 下载到客户端网站的 session 数据是否存在黑客拦截的风险?

database - 为双因素身份验证存储 "backup codes"的最佳方法?

java - 如何使用 apache wicket 1.54 获取服务器变量?

java - 在 Vaadin 8 中传递和接收数据