【发布时间】:2011-04-28 19:58:25
【问题描述】:
我在不同的 JAR 中有两个具有相同包的类。直到以前的版本,这两个类都是相同的,所以我在加载它们时没有问题。现在,其中一个添加了一个新方法,如果我想访问它,我不仅应该使用该包导入类,我还需要确保具有正确类的 jar 在类路径中排在第一位。
即javac -classpath "%classpath%;a.jar;b.jar" MyClasses..
a.jar 有我的新方法的类。
现在,当我的应用程序投入生产时,我如何确保这一点,它被部署为 EAR 文件,所有库都在 WEB-INF/lib 下?
我如何知道哪个 jar 优先于另一个?是不是像 a.jar 这样的字母顺序优先于 b.jar?
我已经阅读了这个safe-class-imports-from-jar-files 线程并了解了如何编写自定义类加载器,但是有没有更好更简单的解决方案呢?因为我只是要在当前项目的整个 JAR 中访问这个方法,而编写一个类加载器似乎有点矫枉过正。
请不要问我“为什么同一类在不同的 JAR 中具有相同的包?”这完全超出我的控制,需要一些时间才能纠正。
环境细节:IBM WAS 6.1 在他们的 1.5 Java 上。
如果我没有多大意义,请再问我一些问题。提前致谢!
【问题讨论】:
-
好的,谢谢大家的回答。最后,尽管我不想说,任何人都可以建议的唯一真正的解决方法是删除重复项。除此之外,我可以选择将我的 jar 添加到引导类路径或应用服务器的类路径中,但该选项似乎也不可行,因为部署不是由我完成的。我会尽快接受答案。非常感谢,再次感谢。
标签: java classpath classloader websphere-6.1