2013-05-30 49 views
1

我使用JavaFX在Mac上創建了一個應用程序。我使用ant來構建並將該應用程序壓縮到一個文件夾中。如何壓縮保存所有屬性的Mac應用程序

在嘗試使用荏苒

<zip destfile="MyApp.zip" basedir="MyApp"/> 

它創建壓縮文件,但不保留其在MyApp的發現JavaAppLauncher的屬性/ Contents.MacOS/

然後,我已經試過此命令 -

<exec executable="zip" dir="${basedir}/target"> 
    <arg value="-r" /> 
    <arg value="My-app.zip" /> 
    <arg value="My.app" /> 
</exec> 

在解壓縮這個zip文件時,我發現這個應用程序也沒有啓動。現在JavaAppLauncher的屬性被保留了,但是這次我面臨着不保留屬性libjli.dylib(這是別名)在MyApp.app/Contents/PlugIns/jdk1.7.0_21.jdk/Contents/MacOS找到的問題,將其轉換爲動態庫。

可能還有一些文件無法保留其zip文件屬性。那麼如何保存libs,unix文件,alias等應用程序中添加的所有屬性,以便我可以在解壓縮後成功啓動它。

感謝

+0

我認爲大多數開發人員使用diskimages來解決這個問題,而不是它無法完成。 – demure

回答

2

在我的系統至少,libjli.dylib是Unix風格的符號鏈接,而不是Mac的「別名」,在這種情況下,你應該能夠在-y選項添加到zip命令來保存符號鏈接

<exec executable="zip" dir="${basedir}/target"> 
    <arg value="-r" /> 
    <arg value="-y" /> 
    <arg value="My-app.zip" /> 
    <arg value="My.app" /> 
</exec> 

如果是在MAC的意義而不是一個符號別名,那麼你可以嘗試使用ditto,它可以建立一個保存在同一__MACOSX形式Finder的「創建歸檔」資源叉和HFS元拉鍊選項使用。爲了正確提取這樣的壓縮文件,用戶必須在Finder中雙擊它(或者用同上提取它),而不是使用unzip

<exec executable="ditto" dir="${basedir}/target"> 
    <arg value="-c" /> 
    <arg value="-k" /> 
    <arg value="--keepParent" /> 
    <arg value="--sequesterRsrc" /> 
    <arg value="My.app" /> 
    <arg value="My-app.zip" /> 
</exec> 

或者,如嫺靜的意見建議,創建壓縮磁盤圖像,而不是,這是正常的方式Mac用戶希望他們的應用程序來進行分配

<exec executable="hdiutil"> 
    <arg value="create" /> 
    <arg value="-srcfolder" /> 
    <arg file="${basedir}/target" /> 
    <arg value="-volname" /> 
    <arg value="My App" /> 
    <arg file="MyApp.dmg" /> 
</exec> 

這將包的全部內容target,因此您可能需要稍微更改一些路徑,以便是srcfolder中唯一的東西(例如,在target/appbundle/My.app上創建它,然後通過target/appbundle作爲-srcfolderhdiutil)。

+0

感謝您的回覆,因爲我已經告訴過我們正在使用JavaFX部署我們的應用程序,所以它默認會爲我的應用程序創建應用程序和dmg(抱歉,我忘記提及dmg),所以我們不需要爲它創建dmg。我們只需要郵編應用程序。根據你的建議,我嘗試使用-y選項,但它不保留libjli.dylib的屬性(其類型爲zip之前的別名),將其轉換爲動態庫。 –

+0

@NeelamSharma我不清楚爲什麼你需要_both_ dmg和應用程序的zip文件,但我使用「ditto」工具添加了另一種可能性。 –

+0

感謝您的幫助,我試着用對我工作正常:)早些時候,我試圖通過複製應用程序在根目錄不工作。萬分感謝 :) –

相關問題