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

标签 java class jar annotations

所以,问题听起来是这样的:

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

谢谢

最佳答案

如果您真的觉得需要重新发明轮子,那么第 3 方库仍然可以为您提供帮助,因为它们中的大多数都是开源的。特别是this是 Spring 的类路径扫描器实现,它利用了 this实际查找资源的类。

如果你真的想在实现上没有任何差异,那么你可以按照 martijno 的建议,先解压 jar。但是,如果 jar 不在您的类路径中,那么您将需要类似 URLClassLoader 的东西从 jar 加载类。

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

关于java - 在 jar 中运行类时从 jar 中获取所有 .class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12053406/

相关文章:

c# - 命名空间 bla 已经包含(我的部分)类的定义

c++ - Qt QMetaData类名实现

java - 如何在没有Eclipse的情况下运行Spring Boot应用程序?

java - Bazel:带有 sqlite.db 的 Java 资源文件夹

java - 使用 Clojure/Java 为 X.Org 平台编写 WM 所需的技能和知识

java - 为什么 stopService(Intent) 和 stopSelf() 方法不会停止我的独特服务?

java - JDBC 连接错误 - 无法创建 PoolableConnectionFactory

php 获取类/对象变量和继承

android - 如何将带有资源的android库项目转换为jar?

java - 我想使用 Java 通过 CP2102 发送和接收数据