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$_b
、c$_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-29534
或 ORA-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 存储库无法编译的主要内容,如果未能解决你的问题,请参考以下文章