如何在java webstart项目中包含jar依赖项

时间:2013-03-13 02:47:32

标签: java jar jnlp java-web-start

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

我们之前可以通过将必要的jar放在jre文件夹的/ ext /目录中来完成此操作。然而,这导致库与我们的tomcat服务器冲突,所以我们想避免这种方法。

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

<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>