如何在JavaWebStart项目中包含jar依赖项

如何在JavaWebStart项目中包含jar依赖项,java,jar,jnlp,java-web-start,Java,Jar,Jnlp,Java Web Start,我们正在尝试使用JavaWebStart开发一个打印应用程序。我们使用eclipse将jar创建为普通jar文件。我们的应用程序需要外部库来连接数据库、将数据转换为字节等 我们以前可以通过将必要的jar放在jre文件夹的/ext/目录中来实现这一点。但是,这导致了与tomcat服务器的库冲突,因此我们希望避免这种方法 我们还尝试将项目导出为可运行的jar,因为所需的库也已打包在jar中。但是当尝试运行应用程序时,它似乎无法看到jar中的库 我们还知道,我们可以将所需的库放在jar旁边的文件夹中,

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

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

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

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

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

打印机WebStart
罗伯特
打印机WebStart
打印机WebStart

打包web start应用程序的正确方法是在
标记中列出正在使用的库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>


“但是,我们希望避免这种方法,因为我们有很多外部jar,我们不想逐个导入它们:)”这只是最好的方法。例如,它支持应用程序的延迟下载。组件,以及可能较小的组件更新(以字节为单位)。你为什么要用别的方法呢?嗨!我们认为,如果将所需的外部库也打包到jar中会更好。如果将它们放在外部文件夹中是最好的方法,那么我们将实现这一点。谢谢你的回复!“Java Web Start不支持清单文件中的
类路径
项。”-请注意,感谢脚本对所有JAR进行签名!我还想知道,我可以强烈建议jar文件在其部署的文件名中有一个时间戳,该时间戳在文件更改时(或每次部署时)会更改。如果时间戳比较检查失败,不同的文件名将确保旧版本不会意外地误认为新版本。我们在生产中已经被这一点所困扰。@ThorbjørnRavnAndersen-但这要求JNLP文件更改,因为它显式地命名jar资源。我希望我的用户安装我的应用程序,并通过桌面快捷方式或双击相关文件来运行它。这意味着我不能接受你的建议,对吗?在JNLP文件中,jar资源的短名称和长名称没有区别,我把这个脚本放在哪里?内部标签?因为它不适合我