我有一个在 Weblogic 12.1.3 中运行的 Java 8 应用程序。该应用程序使用 iText 5.5.9 并且所需的 BC 的最低版本是 1.49 。该应用程序在 Weblogic 中部署为 WAR 文件。我可以看到 war 文件具有正确版本的 BC 。但在运行时,它取自 WebLogic maven 插件路径并使用 BC 1.45。有什么方法可以通过编辑 POM 条目或编辑 WebLogic.xml 来避免这种情况。如果我从本地服务器中删除 BC 1.45 jar,它会成功运行。但我无法从更高的环境服务器中删除 jar。所以请帮忙。谢谢。
最佳答案
这是一个已知问题。 BC 在版本之间破坏了他们的 API,当你的 CLASSPATH 中有两个不同的 BC 版本时,你会得到非常奇怪的错误(这可能会根据首先加载的版本而有所不同)。我看到您仍在使用旧的 iText(不是 iText 7),这意味着您可以切换到 iTextG。
iTextG 中的 G 代表 Google,创建 iTextG 是为了避免一些问题。例如:
BouncyCaSTLe 和 SpongyCaSTLe 是相同的,除了它们的包名称和安全提供者的名称(“BC”与“SC”)。由于这些差异,两个不同的版本,例如 WebLogic 中的 BC 版本 1.45 和 iTextG 应用程序中的 SpongyCaSTLe 版本 1.49 不会发生冲突。
这对于在 Android 上使用 iText 是必要的,因为 Android 附带旧版本的 BC(就像您的 WebLogic 附带旧版本一样)。
关于java - 通过POM入口运行应用程序时如何避免bcprov-jdk16-1.45.jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49682961/