【问题标题】:List all interfaces in a package in a jar file在 jar 文件中列出一个包中的所有接口
【发布时间】:2013-06-09 12:57:46
【问题描述】:

你好 stackoverflow 的人! 我正在尝试列出特定包中接口中的所有类。 我遇到了多种解决方案并尝试了以下方法:

使用反射:

AllCommands = new ArrayList<ICommand>();
Reflections reflections = new Reflections(this.getClass().getPackage().getName());
commandClasses = reflections.getSubTypesOf(ICommand.class);
for (Class<? extends ICommand> c :commandClasses){
    AllCommands.add((ICommand)c.newInstance());
}

使用 extcos:

AllCommands = new ArrayList<ICommand>();
ComponentScanner scanner = new ComponentScanner();
scanner.getClasses(new ComponentQuery() {
    @Override
    protected void query() {
        select().
        from(this.getClass().getPackage().getName()).
        andStore(thoseImplementing(ICommand.class).into(commandClasses)).
        returning(none());
    }
});
for (Class<? extends ICommand> c :commandClasses){
    AllCommands.add((ICommand)c.newInstance());
}

在 NetBeans (7.3) 中调试时,两种解决方案都成功列出了我的所有类,但是当我编译 jar 并执行它时,commandClasses 集合似乎保持为空。我不习惯 java,但我想它必须对类路径做一些事情,并且调试时间从 \target\classes 文件夹而不是 jar 中获取类。

有人可以帮助我提供一个允许我在 .jar 中列出类的解决方案吗? 是否可能 this.getClass().getPackage().getName() 只需更改为指向 jar 的内容?

【问题讨论】:

  • ?我该怎么做呢
  • “我该怎么做” 做什么?你必须更具体,因为我不打算写教程。

标签: java jar classpath reflections


【解决方案1】:

我自己想通了.. 使用 this.getClass().getPackage().getName() 作为 Packagename 只指向类文件夹中的文件,以引用我需要替换 '. '至 '/'。还是谢谢你。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 2011-08-14
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    相关资源
    最近更新 更多