1

在我的项目中,我依赖于org.slf4j-api:1.7.2and org.eclipse.equinox:org.eclipse.equinox.http.jetty:2.0.100

Jetty 团队中的org.slf4j.Logger个人将这两个类复制到org.slf4j.LoggerFactory了他们的 JAR 中。谢谢你

现在我org.slf4j.Logger 在 classpath 上有两次。只要它们的公共 API 相同,这不是一个大问题。

如何编写一个测试来确保两个类文件的公共 API 相同?

编辑用反射检查类看起来是一个明显的解决方案,但我如何加载它们?有两种资源org/slf4j/Logger.class可用。如何将原始.class文件转换为java.lang.Class我可以检查的文件?

Class.forName()在我的情况下不起作用,因为那只会给我两者之一(我什至不知道哪一个)。

4

2 回答 2

1

javap程序列出了一个类文件的 API。你这样称呼它:

javap -classpath [your_classpath] -public org.slf4j.LoggerFactory

这将打印公共成员列表,但您也可以键入javap -help以查看其他选项。

另一种方法是编写一个 Java 程序,它使用反射来列出每个类的 API,但我认为这种方法会更容易,并且完全符合您的需要。

于 2013-02-22T10:12:41.910 回答
0

您是否可以反思以获取公共方法并通过名称及其参数来比较它们。这会很混乱,但是可以进行测试。

此外,如果它只是一次性的,您可以浏览资源。

于 2013-02-22T10:13:16.687 回答