2

语境

我正在做一个使用JUNG 库的项目。我的自定义 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 本身。我可能错了,或者完全误解了意思。纠正我!

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

4

1 回答 1

2

我想我已经找到了答案。

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

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

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

带走

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

谢谢

I want to thank @Miguel-F and @Brian for their inputs on system configuration. And more thanks to @Leigh for his Different how?. It made me think again and find my answer.

于 2013-03-21T06:22:41.187 回答