列出jar文件中包中的所有接口

时间:2013-06-09 12:57:47

标签: java jar classpath google-reflections

Hello stackoverflow'ers! 我试图从特定包中的接口列出所有类。 我遇到了多种解决方案并尝试了以下方法:

使用思考:

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的东西?

1 个答案:

答案 0 :(得分:0)

我自己想通了..使用this.getClass()。getPackage()。getName()作为Packagename只指向classes文件夹中的文件,引用我需要替换'的jar中的类。 “至 '/'。无论如何,谢谢你。