跳转至内容

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”。

华夏公益教科书