【问题标题】:Find all classes in a given package [duplicate]查找给定包中的所有类[重复]
【发布时间】:2013-01-28 03:25:17
【问题描述】:

给定一个包,是否有可能找到其中的所有类?

例如,您如何找出java.lang 中包含哪些类?

谢谢

【问题讨论】:

    标签: java reflection package


    【解决方案1】:

    这应该让你开始(看看控制台输出,这会很有意义):

    import com.google.common.collect.Multimap;
    import org.reflections.Reflections;
    
    import java.util.Map;
    
    public class PackageWalker {
        public PackageWalker() {}
    
        public void walk() {
            Reflections reflections = new Reflections("org.reflections");
            for (String mmapName : reflections.getStore().getStoreMap().keySet()) {
                System.out.println("KEY["+mmapName+"]");
                Multimap<String,String> mmap = reflections.getStore().getStoreMap().get(mmapName);
                for (Map.Entry<String,String> entry: mmap.entries()) {
                    System.out.println("  PAIR[ "+entry.getKey()+"="+entry.getValue()+" ]");
                }
            }
        }
    
        public static void main(String[] args) {
            new PackageWalker().walk();
        }
    }
    

    需要以下 jars 及其依赖项(使用 Ivy 格式):

        <dependency org="org.reflections" name="reflections" rev="0.9.8"/>
    

    这是我的项目文件夹: http://www.filedropper.com/laboratorytar

    您只需要确保 Ivy 已安装 ant(基本上将 ivy.jar 放入您的 ANT_HOME/lib(或 *nix 上的 ~/.ant/lib/),它就可以工作了)。

    【讨论】:

    • 但是我的项目不是 maven 项目。我已经从谷歌页面下载了 jar 文件,但不知道如何将它放入我的 ant 项目中
    • 我只是将其作为参考,供您参考。你应该研究一下 Ivy 和 ant,它很容易设置,它会为你做依赖,所以你不必管理 jars(我大概花了 30 分钟才能让它工作:ant.apache.org/ivy Ivy 比马文)。拿走所有的罐子,把它们放到某个 lib 文件夹中,当你从 ant 运行它时,将这些罐子添加到类路径中(通常的方式是你做外部罐子)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 2010-10-09
    • 2012-04-20
    • 2018-11-11
    • 2012-04-16
    • 2013-05-13
    相关资源
    最近更新 更多