【问题标题】:Get all .class from jar when running a class in the jar在jar中运行类时从jar中获取所有.class
【发布时间】:2012-08-21 10:58:34
【问题描述】:

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

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

谢谢

【问题讨论】:

  • 我实际上想知道是否有一种方法可以在本地运行和从.jar 运行时不进行不同的解析,我想知道是否有一种方法可以在不处理的情况下获取类单独案例
  • 是否有你不想使用现成库的具体原因?您想从特定 JAR 还是从类路径中读取类文件?
  • 我正在尝试从我用来运行类的同一个 .jar 文件中读取类文件。
  • 问题是我加载了类名和路径,但是因为我是从 jar 运行的,所以方法 Class.forName(className) 失败

标签: java class jar annotations


【解决方案1】:

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

如果您真的想在实现中没有任何差异,那么您可以按照 martijno 的建议采取一种方法,首先提取 jar。但是,如果 jar 不在您的类路径中,那么您将需要 URLClassLoader 之类的东西来从 jar 加载类。

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

【讨论】:

    猜你喜欢
    • 2020-01-30
    • 1970-01-01
    • 2017-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    相关资源
    最近更新 更多