2013-03-13 201 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