2013-03-13 167 views
1

我们正在尝试使用java webstart开发一个打印应用程序。我们使用eclipse将jar创建为一个普通的jar文件。我们的应用程序需要外部库,用于连接到数据库,将数据转换为字节等如何在java webstart项目中包含jar依赖关系

我们能够通过建立必要的罐子在J​​RE文件夹/ EXT /目录之前做到这一点。然而,这导致了与我们的tomcat服务器的库冲突,所以我们想避免这种方法。

我们还试图出口项目作为一个可运行的水瓶中需要的库都在罐子里已经打包也。但是当试图运行应用程序时,它似乎无法看到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

*“但是我们想避免这种方法,因为我们有很多外部的罐子,我们不想一一输入它们。”*这只是最好的方法。例如。它支持应用程序的懒惰下载。组件和组件更新可能很小(以字节为单位)。你为什么要以其他方式来做? – 2013-03-13 03:21:47

+0

嗨!我们认为如果所需的外部库也被包装在jar中会更好。如果将它们放在外部文件夹中是最好的方法,那么我们将执行此操作。谢谢回复! – user1928162 2013-03-13 03:32:08

+1

“Java Web Start的不支持清单文件中的'类Path'项目。” - [常见问题](http://docs.oracle.com/javase/6/docs/technotes/guides/javaws/developersguide/ faq.html#209) – trashgod 2013-03-13 20:06:49

回答

2

正确的方式来包装一个网络启动应用程序是列为你在做你正在使用的<resources>标签库的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> 
+0

ok注意,感谢脚本签署所有的罐子!我还在寻找 – user1928162 2013-03-20 03:17:21

+0

我强烈建议jar文件在其部署的文件名中有一个时间戳,当文件更改(或每个部署)时,文件会发生更改。如果时间戳比较检查失败,则不同的文件名将确保旧版本不会被误认为新版本。我们一直在生产中被咬。 – 2013-04-21 13:09:45

+0

@ThorbjørnRavnAndersen - 但这要求JNLP文件更改,因为它明确命名了jar资源。我希望我的用户安装我的应用程序并从桌面快捷方式或通过双击关联的文件运行它。这意味着我不能接受你的建议,对吧? – Thorn 2013-04-22 02:52:45