在jar中运行类时从jar获取所有.class

时间:2012-08-21 10:58:34

标签: java class jar annotations

所以,问题听起来像这样:

我需要在项目中获取所有具有特定注释的类。我已经设法在没有任何外部库的情况下执行此操作(我确实在src文件夹中获取所有.class文件并检查该类是否有注释)。我在本地运行它时运行正常(作为java应用程序运行)。当我将项目导出为.jar并尝试运行相同的类时,当然它无法正常工作,因为我的解析器无法找到任何类。基本上,现在我正在尝试在运行相同的jar时获取jar文件中的所有.class文件。有没有什么方法可以做到这一点而不添加像反射这样的另一个库?

谢谢

1 个答案:

答案 0 :(得分:0)

如果您真的觉得需要重新发明轮子,那么第三方图书馆仍然可以帮助您,因为大多数图书馆都是开源的。特别是this是Spring的类路径扫描程序的实现,它利用this类来实际查找资源。

如果你真的想在没有任何实现差异的情况下这样做,那么你就像martijno建议的那样,首先提取jar。但是,如果jar不在你的类路径上,那么你需要像URLClassLoader之类的东西从jar中加载类。

另一种方法是更改​​当前实现以扫描类路径。这涉及使用ClassLoader.getResources方法查找给定包中的所有类和子包。然后,无论您是使用文件还是jar,您只需要获取包含所需类的类加载器(例如URLClassLoader)(如果它们位于类路径中,则使用系统类加载器)。