【问题标题】:How to include jar dependencies in java webstart project如何在 java webstart 项目中包含 jar 依赖项
【发布时间】:2023-03-27 04:40:02
【问题描述】:

我们正在尝试使用 java webstart 开发打印应用程序。我们使用 eclipse 将 jar 创建为普通的 jar 文件。我们的应用程序需要外部库来连接数据库,将数据转换为字节等。

我们之前可以通过将必要的 jars 放在 jre 文件夹的 /ext/ 目录中来做到这一点。然而,这导致了与我们的 tomcat 服务器的库冲突,因此我们希望避免这种方法。

我们还尝试将项目导出为可运行的 jar,因为所需的库也已打包在 jar 中。但是在尝试运行应用程序时,它似乎无法看到 jar 中的库。

我们也知道,我们可以将需要的库放在jar旁边的一个文件夹中,并在jnlp文件中一一引用。但是我们想避免这种方法,因为我们有很多外部 jar,我们不想一个一个地导入它们:)

所以我的问题是我们如何正确打包 java webstart jar?还有其他方法吗?最好的方法是什么?

请参阅下面的 jnlp 文件:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<jnlp codebase="http://192.168.1.169/webstart/" href="launch.jnlp" spec="1.0+">
    <information>
        <title>PrinterWebStart</title>
        <vendor>robert</vendor>
        <homepage href=""/>
        <description>PrinterWebStart</description>
        <description kind="short">PrinterWebStart</description>
    </information>
    <update check="always"/>
    <security>
<all-permissions/>
</security>
    <resources>
        <j2se version="1.5+"/>
        <jar href="printer-base.jar" main="true"/>
    </resources>
    <application-desc main-class="com.ccti.printer.task.PrinterTaskPanel">
    </application-desc>
</jnlp>

【问题讨论】:

  • “但是我们想避免这种方法,因为我们有很多外部 jar,我们不想一个一个地导入它们:)”最好的方法。例如。它支持应用程序的延迟下载。组件,以及可能很小(以字节为单位)的组件更新。您为什么要以其他方式进行操作?
  • 嗨!我们认为如果需要的外部库也打包在 jar 中会更好。如果将它们放在外部文件夹中是最好的方法,那么我们将实现这一点。感谢您的回复!
  • "Java Web Start 不支持清单文件中的Class-Path 条目。"—FAQ

标签: java jar jnlp java-web-start


【解决方案1】:

打包 web-start 应用程序的正确方法是在您正在使用的 &lt;resources&gt; 标记中列出您正在使用的库 jar 文件。我的项目使用了 12 个库文件,启动时间还是相当不错的。当程序第二次启动时,客户端 PC 需要做的就是检查 jar 文件是否没有更改。这使得未来的发布速度非常快。

如果您的库中有许多不同的 jar 文件,您可能会担心将服务器上这些文件的最后修改日期与本地存储的版本进行比较可能会浪费一些时间。为了使更新检查更有效,您可以在资源文件中指定版本号,从而指定avoid unnecessary update checks

如果 JNLP 需要包含已签名的代码,那么一次唱出所有这些 jar 文件可能会让人感觉很痛苦。为简化此过程,请考虑使用以下 ant 脚本对 lib 文件夹中的所有 jar 进行签名。

<target name="signLibs">
   <signjar destDir="signed"  alias="aliasName" keystore="yourKeyStoreName"
      storepass="PaSSW0rD" force="true" >
   <path>
      <fileset dir="lib" includes="*.jar" />
   </path>
   </signjar>   
   <echo message="Library files were signed."/>
</target>

【讨论】:

  • 好的,感谢您为所有 jars 签名的脚本!我也在找那个
  • 我强烈建议 jar 文件在其部署的文件名中包含一个时间戳,该时间戳会在文件更改(或每次部署)时更改。如果时间戳比较检查失败,不同的文件名将确保旧版本不会被误认为是新版本。我们在生产中被这个问题所困扰。
  • @ThorbjørnRavnAndersen - 但这需要更改 JNLP 文件,因为它明确命名了 jar 资源。我希望我的用户安装我的应用程序并通过桌面快捷方式或双击关联文件来运行它。这意味着我不能接受你的建议,对吧?
  • JNLP 文件中 jar 资源的短名和长名没有区别
  • 我把这个脚本放在哪里了? 标签内?因为它对我不起作用
猜你喜欢
  • 2018-12-19
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-05
  • 2015-06-27
  • 1970-01-01
相关资源
最近更新 更多