【问题标题】:Java Web Start and FoldersJava Web Start 和文件夹
【发布时间】:2011-03-24 09:39:58
【问题描述】:

我们目前有一个 Java 应用程序,可以部署在客户端上或作为服务器的快捷方式运行。当从服务器运行 JAR 时,我们间歇性地收到 ClassNotFound 异常,这看起来就像 Windows 断开了网络连接,只加载了 JAR 中的部分类(用户打开不同的屏幕,然后问题就很明显了)。

我目前正在研究允许我们运行单个快捷方式的 Web Start 技术。

但是,应用程序有多个文件夹,它需要位于启动 JAR 的同一文件夹中(用于配置、日志等)。这些文件夹将需要所有用户的完全访问权限才能允许他们写入日志文件。配置文件夹层次结构下有很多配置文件。

应用程序还需要访问环境用户设置(例如获取他们的用户文件夹)。它还需要某些命令行参数(包括用于配置的文件夹、日志文件位置、java 内存使用情况等)

编辑

该应用程序还包含对 2 个已签名 JAR 的引用。它们是:

  • jh.jar
  • mail.jar

看起来这些是由 SUN Microsystems 签署的。 jh 用于在我们的应用程序中集成帮助,而 mail 用于电子邮件集成。

我现在已经从 java2s.com 下载了这些文件的最新版本,它们没有签名的等价物。

结束编辑

该应用程序是在 Netbeans 中开发的,它编译单个 JAR 文件并将依赖的 JAR 复制到 dist/lib 文件夹。我在 Netbeans 中为应用程序启用了 Web Start 功能,它会生成 JNLP 文件。

考虑到一切,Web Start 是适合这样的应用程序的方式吗? 能否在 Web Start 部署中包含文件夹?我在 JNLP 文件的 XML 结构中找不到任何可以执行此操作的内容。

干杯,

安德斯

【问题讨论】:

  • 是服务器(加载应用程序的位置)或客户端(用户运行应用程序的位置)上需要访问的文件夹
  • 嗨@objects。抱歉耽搁了。最近几个月一直很忙。日志位于服务器上的一个位置。所有用户都将登录到此文件夹。我们的应用使用 java.util.logging.Logger 进行日志记录。
  • 这可能是一个问题,因为 jws 应用程序在客户端而不是服务器上运行

标签: java security permissions java-web-start


【解决方案1】:

是的,您可以为此使用 WebStart。

权限: 如果您需要文件系统的权限,您必须签署您的 jar 并将all-permissions 标签放入您的 jnlp.xml 中。

参数: 可以使用application_desc 中的参数元素来提供参数。

文件夹: 我不认为你可以在 WebStart 应用程序中包含文件夹,但你可以将配置文件放在一个 jar 中并从那里读取它们,或者在启动时提取它们。

ClassNotFoundError:

我们间歇性收到 运行时出现 ClassNotFound 异常 来自服务器的 JAR 看起来 就像 Windows 掉线一样 仅与部分连接 已加载 JAR 中的类

对我来说听起来不太合理。默认情况下,将在应用程序启动之前下载所有 jar。如果你将“下载”设置为“懒惰”,jar 将在第一次需要时下载,但我猜它会完全下载。

【讨论】:

  • @Tim Büthe - 我比以前更进一步了,谢谢蒂姆。我让 Netbeans 编译应用程序。我已将命令行参数添加到项目中,netbeans 创建了包含这些参数的 JNLP。但是,当我尝试通过执行 JNLP 文件进行下载时,我现在收到一个不同的错误,抱怨引用的 JAR 文件之一 - 来自 java4less.com 的 rfax.jar。 com.sun.deploy.net.JARSigningException:无法验证登录资源:文件:/MyApp/dist/lib/rfax.jar 看起来 rfax.jar 具有 NB-JWS-DSA 和 NB-JWS.SF 密钥和其他 JAR 一样。
  • 现在我已经从我的项目引用中删除了 rFax.jar 文件,因为它似乎没有被使用。我现在在下载时没有收到任何错误,但是没有任何反应 - 没有显示 UI。所以再进步一点。
  • 您应该激活控制台以查看是否发生异常。您可以在 Java 控制面板中执行此操作。
  • 嗨蒂姆。我现在已经做到了,谢谢。我决定在应用程序中放置一个新的类和 main 方法,它显示一个消息框,而不运行正常的应用程序执行路径。这显示了我的消息框。
  • @Andez 恭喜您取得成功!不要忘记将最相关的答案标记为“正确”。
【解决方案2】:

您可以为 Java WebStart 提供只读资源。取回日志更难。我建议使用您使用的日志框架中的标准附加程序之一来研究集中式日志记录解决方案。

【讨论】:

  • 我们使用标准的 java.util.logging.Logger 类进行日志记录。
【解决方案3】:

对于 Java Web Start 应用程序,始终建议不要在类路径中创建文件或文件夹。推荐用户的主目录来存储您的设置或数据库文件。

【讨论】:

    猜你喜欢
    • 2012-01-14
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多