使用Java WebStart创建桌面应用程序的最佳实践

时间:2011-01-31 12:00:29

标签: java java-web-start

希望我能清楚地解释清楚。我正在创建一个依赖于其他外部jar文件的桌面应用程序。例如,我的应用程序是基于Spring的,因此我的应用程序中需要一些SpringFramework jar文件。

我正在使用Java WebStart来“启动”这个桌面应用程序。 (至于我这样做的原因是我需要通过我们正在构建的网站执行这个自定义桌面应用程序。)

但是,当我通过单击jnlp描述文件执行桌面应用程序时,我遇到了麻烦。它给出了错误,指出我的桌面应用程序正在使用的某些类没有类定义。然后我意识到我的桌面应用程序在打包为JAR文件时,它没有包含我的其他JAR依赖项。因此出错的原因。

我想,我可以在我的桌面JAR文件中包含外部JAR依赖项,但这会使我的桌面JAR文件非常大。然后由于大型JAR文件导致我的JAR文件下载速度变慢,因为单击JNLP描述符文件将始终从服务器的桌面JAR文件中获取。 (除非我能告诉'如果服务器上没有新版本,JNLP描述符不下载。)

无论如何,我在想是否这是一种可接受的方法,我的桌面JAR文件不会包含JAR依赖项,而只会引用它。当我的桌面应用程序启动时,它将检查这些依赖项是否在桌面上可用,如果它不可用,它将调用另一个JNLP描述符,该描述符将下载外部JAR文件并将它们复制到我的桌面的预定位置申请参考。这会有用吗?或者我的问题是否有更简单的解决方案?

感谢

3 个答案:

答案 0 :(得分:3)

JNLP文件应包含对主文件的引用,但也包括所有需要的库。这是标准功能,您应该这样做。

请注意,文件名中应该有一个时间戳,以避免在更新代码时出现缓存问题。

答案 1 :(得分:2)

您需要让JNLP参考您拥有的其他罐子。是的,下载需要稍长的时间,但只要你不包括一堆你不需要的罐子就不需要花很长时间。 Web Start非常智能,无法重新下载在同一应用程序的后续启动时未更改的jar。我有Java Web Start应用程序,它有几个大罐子,这很好用。

至于将额外的罐子放在用户的机器上,我不建议这样做。如果您要这样做,那么使用Web Start并没有太大意义,您也可以在桌面上安装整个程序。

答案 2 :(得分:0)

其他答案涵盖了大多数基础,但我想应该补充一点,将额外的Jars标记为download ='lazy'可能是有意义的。