跳轉至內容

WebObjects/Web 應用程式/開發/第三方 Jars

來自華夏公益教科書,為開放世界提供開放的書籍

使用 Xcode 的第三方 Jars

[編輯 | 編輯原始碼]

您正在使用 Xcode,並且希望在專案中使用一個或多個第三方 JAR 檔案。

從 WO 5.2 開始,一個合理的解決方案是將您需要的所有 JAR 檔案扔到 /Library/WebObjects/Extensions/ 中(參見 WebObjects 5.2 中的新增功能,在啟動架構部分:http://developer.apple.com/documentation/WebObjects/WhatsNew5.2/)。此解決方案的問題在於它會造成一些管理上的麻煩。您不一定知道哪些專案正在使用哪些 JAR 檔案,如果不同的專案需要不同版本的相同第三方 JAR 檔案,您可能會遇到問題。

例如,我們有一個使用 Batik SVG 工具包的專案。我們需要 batik-1.5.1 中包含的許多 jar 檔案中的類。但是,如果另一個專案需要一個不同(例如更新的)版本的 Batik 會發生什麼?我們要麼必須確保舊專案能夠使用更新的 batik,要麼將自己限制在舊的 batik 程式碼中以用於新專案。

解決方案

[編輯 | 編輯原始碼]

解決此問題的一個方法是建立一個 WebObjects 框架,其中包含特定版本的外部專案(如 Batik)的所有 jar 檔案。這樣,多個 WO 應用程式可以使用相同的 WO 框架(例如 batik-1.5.1.framework),但是如果出現一個新的 batik 版本,我們需要將其用於新專案,並且如果它與舊版本完全不相容,那麼我們就可以建立一個新的 batik WO 框架,並以新版本命名;例如,如果/當 batik-2.0 釋出時,可以使用 batik-2.0.framework。

以下是如何操作(我將繼續使用我的 batik-1.5.1 示例)

(1) 在 Xcode 中,建立一個新的 WebObjects 框架專案(例如 batik-1.5.1)。

(2) 在框架專案的 Resources 組下建立一個新組。此步驟是可選的,但建議您這樣做,只是為了組織清晰。為了實現此目的,我建議您將新組命名為 Java(我們稍後會看到原因)。

(3) 將所需的 JAR 檔案新增到此組中。對於我的 batik 示例,我在 batik-1.5.1/lib 目錄中選擇了所有 .jar 檔案。選中“將專案複製到目標組資料夾(如果需要)”,並選擇聚合目標(即與專案名稱相同的目標)。

(4) 我們想在聚合目標中新增一個新的構建階段。開啟 Targets 組(位於 Groups & Files 下),雙擊聚合目標。必須將此新的構建階段新增到聚合目標中,而不是 Application Server 目標中!

(5) 我們希望在構建階段列表的末尾或附近新增新的構建階段。因此,右鍵單擊(或按住 Control 鍵單擊)最後一個構建階段,選擇“新建構建階段”,然後選擇“新建複製檔案構建階段”。您也可以在建立新的構建階段後將其拖動到新位置。

(6) 將新建構建階段的“位置:”彈出視窗更改為“Java 資源”。

(7) 在主專案視窗中,選擇新增到新 Resources -> Java 組的所有 JAR 檔案,並將它們拖動到新複製檔案構建階段的“檔案:”區域(在聚合目標面板中)。

(8) 構建並安裝您的 WO 框架

xcodebuild install -configuration Deployment DSTROOT=/ 

就這麼簡單。在已安裝的框架中,您會發現所有 .jar 檔案都位於 Resources/Java 目錄中(例如 /Library/Frameworks/batik-1.5.1.framework/Versions/A/Resources/Java),無論您在專案中為組命名什麼。

非常感謝 Chuck Hill 為此解決方案提供了關鍵成分。

另一種解決方案

[編輯 | 編輯原始碼]

WebObjects 應用程式會自動載入 .woa 包裝器中“Contents/Extensions”子資料夾中的所有 .jars。與框架方法相比,它具有以下優勢:它使 .woa 完全自包含,並且如果不同的 WebObjects 應用程式需要不同版本的 .jar 檔案,則可以避免潛在的版本衝突。缺點是 .jar 未在應用程式之間共享,因此如果您想更新它,則需要為每個 .woa 單獨更新它,並且您可能會有多個 .jar 副本佔用磁碟空間。(後者通常不是現在的問題。)

為了在 XCode 中的構建過程中自動執行此操作,請在頂層目標中新增一個複製檔案構建階段。將目標設定為“包裝器”,並將路徑設定為“Contents/Extensions”。

華夏公益教科書