【问题标题】:Changing JAR files in ColdFusion WEB-INF lib在 ColdFusion WEB-INF 库中更改 JAR 文件
【发布时间】:2013-03-20 11:21:11
【问题描述】:

上下文

我正在做一个使用JUNG libraries 的项目。我的自定义 java 代码和 Jung 库都放在 wwwroot/WEB-INF/lib 下。

请注意,JUNG 的某些类依赖于 Apache commons-collections.jar,它也存在于同一文件夹中(由 CF 默认提供)。

问题

我们计划从 CF7 迁移到 CF10,因此,我正在对项目中的所有代码进行试点测试,发现某些代码(使用 JUNG)因“未找到类”而失败例外。

在调试和检查 CF 10 中给出的 commons-collections-2.1.jar 中的方法时,我发现它与 CF 7 中的方法不同。如果我将 JAR 更新为最新的 commons-collections-3.2.1 版本,代码工作正常,因为它找到了所有需要的类。

我可以更改我的代码库以适应默认的 commons-collections-2.1.jar,但这会导致至少 2-3 个月的开发测试周期。我想把它作为最后的选择,如果可能的话最好避免它。

现在,我的问题是 -

  1. 如果我用 3.2.1 更改(更新)2.1 会有什么问题?
  2. 使用此 JAR 的核心 CF 的哪些部分可能是?
  3. 为什么 CF 使用这个过时的 2.1(我觉得是)JAR 版本?

我做过的家庭作业

  • 测试:为了不影响其他应用程序,我创建了一个单独的实例,将 JAR 更改为最新的 3.2.1,在其上托管我的应用程序并进行了一些测试。一切似乎都很好,因为我没有遇到任何问题。但是,我担心 CF 中可能存在依赖于这个 JAR 的区域并且可能会中断。

  • cfusion\lib:我发现 commons-collections-3.2.1 已经存在于主 lib (cfusion\lib) 文件夹中。因此,更改 WEB-INF/lib 中的 JAR 可能没有任何区别。

  • cfusion\wwwroot\WEB-INF\lib :我已阅读到此文件夹中的任何 JAR 文件仅用于应用程序,而非 CF 本身。我可能错了,或者完全误解了意思。纠正我!

这个问题的答案将有助于我更多地理解CF并解决问题。

【问题讨论】:

  • 这看起来很奇怪。我仍在运行 ColdFusion 9 并检查了 commons-collections jar 的设置。它使用/cfusion/lib/ 文件夹中的commons-collections-3.2.1.jar。我无法想象 Adob​​e 会恢复使用 ColdFusion 10。您说您也在 /cfusion/lib/ 文件夹中找到了 commons-collections-3.2.1.jar 文件。如果您的服务器没有使用该服务器,那么它从哪里提取commons-collections-2.1.jar 文件? 有人可以验证您的 ColdFusion 10 安装中使用的是哪个 jar 文件吗?
  • commons-collections-3.2.1.jar 也在我的 CF10(更新 7)安装中使用(Mac OS 10.8.2)。
  • commons-collections-2.1.jar 在 CF 10 中给出,我发现它与 CF 7 中的不同 不同如何?因为它们都声称是 2.1 版本。 class not found' exception 你能编辑你的帖子以包含完整的堆栈跟踪吗? 使用此 JAR 的核心 CF 的哪些部分可能是? 不幸的是,这很难说。从project description 开始,它是一个非常通用的库,涉及集合(思考结构)。所以它可以在任何地方使用。主要区别在于 2.x 支持较旧的 jvm,而 3.x 需要 jvm 1.5+
  • CF中有两个版本的commons-collections.jar。 /cfusion/lib 中的一个是 3.2.1(最新),/cfusion/wwwroot/WEB-INF/lib/ 中的一个是 2.1。我已经更新到 CF 10 Update 8。我没有注意到任何明显的变化。
  • @Leigh 缺少的类/接口是 org.apache.commons.functors.Predicate 和 org.apache.commons.functors.TruePredicate。以上内容在 2.1 中不存在(在 /WEB-INF/lib 中给出),但在 3.2.1 (/cfusion/lib) 中存在。我做了一个 JAR 反编译并检查了存在的类。仿函数在 3.2.1 中存在的 2.1 中缺失。

标签: coldfusion apache-commons coldfusion-10


【解决方案1】:

我想我找到了答案。

Adobe 在制作 CF10 时更改了其 WEB-INF/lib 中的 commons-collections.jar,这是我的一个误解。它没有,即使它确实(假设),它也与我的问题无关。

在阅读了@Miguel-F@Leigh 的cmets 之后,我检查了之前的安装并比较了lib 的变化。在此期间,我发现以前的一位开发人员故意将commons-collections 从CF 提供的原始内容更改为使用JUNG 的自定义集合可以正常工作。我从 JAR 编译签名和其中与更改相对应的小注释中确认了这一点。

现在,我已将相同的文件复制到新的 CF 10 中,并且我的报告运行良好。

带走

  1. 仅当您处理自定义代码并且重要的是您知道自己在做什么时,/WEB-INF/lib/ 中对 JAR 的更改才不会影响您的 CF 安装。
  2. 如果可能,请将此类更改记录为应用程序开发日志的一部分,以便在您离开时,下一位开发人员可以轻松了解这些自定义设置。
  3. 与社区讨论您的问题,在让他们了解问题的过程中,您可能会找到答案。 :)

谢谢

我要感谢 @Miguel-F@Brian 对系统配置的投入。还要感谢@Leigh 他的不同的方式?。这让我重新思考并找到了答案。

【讨论】:

  • 请记录此类更改 +1000。一行文档可以节省下一个开发人员的时间。很高兴现在一切正常(感谢您发布决议)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-01
  • 2014-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多