Oracle Java 存储库无法编译

Posted

技术标签:

【中文标题】Oracle Java 存储库无法编译【英文标题】:Oracle Java stored librairies won't compile 【发布时间】:2014-06-17 23:56:22 【问题描述】:

我希望将 Java 库存储在我的 Oracle 数据库中。请注意,这是我第一次这样做。该库是pd4ml。它由两个 jar 组成,其中包含已编译的类。

pd4ml.jar ss_css2.jar(pd4ml.jar 需要)

由于使用 Toad 加载它们不起作用(Toad 说它们已成功加载,但它们没有出现在任何地方)我进入命令行 (loadjava) 并成功加载 ss_css2.jar。它的所有类都已加载和编译。

第二个库pd4ml.jar 也已加载,但有几个类无法编译。我运行 ojvmtc 来尝试解析引用。我收到以下消息:

找不到以下类:

javax/servlet/http/HttpServletResponseWrapper

org/zefer/pd4ml/npdf/parser/c

第一个,如果我的理解正确的话,应该是11g r2内置的JRE的一部分。浏览 sys 架构,它似乎不存在。

第二个是 jar 库的一部分。现在我不太确定编译后的 Java 的结构,我以前从未研究过它,但我在 org/zefer/pd4ml/npdf/parser/ 中有几个 .class 文件,它们是:c$_bc$_c... . 到c$_g。没有只有c

当传递命令行参数或从 Eclipse 运行它时,该库在我的本地计算机上运行良好,因此它应该可以工作。尝试在 Toad 中编译它们时没有显示特定的错误消息。我感觉这是依赖项/类路径问题。

关于我应该如何确保 pd4ml.jar 中包含的类可以正确访问 ss_css2.jar 中的类的任何提示,或任何潜在的调查原因?也许是一种从 Java 代码中获取详细错误消息的方法?

【问题讨论】:

尝试使用loadjava 命令从命令行加载,可能会提供有关错误的更多详细信息。 This 文章可能会有所帮助。也试试this Documentation 用于命令行中的 loadjava 命令。当您第一次这样做时,您可能会遇到不同的问题。所以最好在上使用调试选项 我使用 loadjava 并没有取得更大的成功(我在原始帖子中提到了“运行命令行”,这可能不太清楚 - 我已经编辑过)。使用 -verbose 命令给了我几个 ORA-2953 没有任何更详细的信息:它们与在 Toad 中显示为无效的相同。 你在加载 jar 文件时尝试过使用调试选项吗? 两者都与-fileoutput 一起完成(参考/检查错误非常方便)唉,没有设法解决问题。我应该补充一点,我尝试使用 -genmissing 选项,它确实摆脱了 ORA-29534ORA-29519 但给了我 Java 错误 (NoSuchMethod)。 【参考方案1】:

c$_b、c$_c.... 到 c$_g 等奇怪的类名是 JAR 文件混淆的结果。混淆仅影响非公共类,因此不会造成伤害。

如我所见,在您的特定情况下,缺少 javax/servlet/http/HttpServletResponseWrapper 类(可能还有更多) - 这些类可以在 servlet-api.jar 中找到。只需从任何 J2EE(或 Tomcat)发行版中获取该文件并将该文件添加到您的项目/应用程序中。

在通常情况下,仅当调用 WebApp 特定的 PD4ML 方法时才需要 servlet-api 类。并且只有当 pd4ml.jar 是 Web 应用程序的一部分时才会调用这些方法(这意味着 servlet-api.jar 在应用程序资源中)。

正如我现在所看到的,Oracle 数据库 Java 子系统会扫描所有引用的资源(即使在某个场景中不需要它们),如果有任何缺失,就会出现恐慌。

【讨论】:

以上是关于Oracle Java 存储库无法编译的主要内容,如果未能解决你的问题,请参考以下文章

无法编译从服务器下载的存储库

Oracle java存储过程中类解析的困惑

无法使用带有 Spring Data 反应式存储库的 Oracle R2DBC 驱动程序执行任何查询

java gradle找不到要编译的github存储库

如何在 Oracle 中调试 Java 存储过程

具有启用 SSL 的 Oracle 数据库的存储库创建实用程序 (RCU)