【发布时间】: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 个月的开发测试周期。我想把它作为最后的选择,如果可能的话最好避免它。
现在,我的问题是 -
- 如果我用 3.2.1 更改(更新)2.1 会有什么问题?
- 使用此 JAR 的核心 CF 的哪些部分可能是?
- 为什么 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。我无法想象 Adobe 会恢复使用 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