1

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

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

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

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

所以我的问题是我们如何正确打包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>
4

1 回答 1

2

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

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

如果 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>
于 2013-03-19T19:26:14.790 回答