java - 请教获取jar包内的方法数的工具,或者能写个main方法!!!
高洛峰
高洛峰 2017-04-17 16:57:18
0
1
842

请教获取jar包内的方法数的工具,请大神帮帮忙

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

모든 응답(1)
刘奇

jar 패키지 org.reflections를 추천합니다. github 주소: https://github.com/ronmamo/reflections
Stackoverflow에 대한 비슷한 질문: http://stackoverflow.com/ 질문/520328/can-you-find-all-classes-in-a-package-using-reflection

반사 Reflections = new Reflections("my.project.prefix");

Set<Class<? 확장 Object>> allClasses = Reflections.getSubTypesOf(Object.class);

예제는 클래스 수준만을 보여주고 있으며, 통계적 방법에 대한 코드는 추후 추가될 예정입니다.

업데이트:
위 코드의 테스트를 통과하지 못했습니다. 죄송합니다! 나는 다른 방법을 시도했습니다. http://stackoverflow.com/questions/15720822/how-to-get-names-of-classes-inside-a-jar-file
jar 패키지를 직접 읽으십시오. Java 정규화된 클래스 이름을 연결합니다.
1. 대상 jar를 Java 프로젝트에 도입합니다.
2. 기본 메소드를 실행합니다.

 private static List<String> getClassNames(String jarPath)가 IOException을 발생시킵니다.
        List classNames = new ArrayList();
        ZipInputStream zip = new ZipInputStream(new FileInputStream(jarPath));
        for (ZipEntry 항목 = zip.getNextEntry(); 항목 != null; 항목 = zip.getNextEntry()) {
            if (!entry.isDirectory() && Entry.getName().endsWith(".class")) {
                // 이 ZipEntry는 클래스를 나타냅니다. 이제 어떤 클래스를 나타냅니까?
                String className = Entry.getName().replace('/', '.') // ".class" 포함
                classNames.add(className.substring(0, className.length() - ".class".length()));
            }
        }
        클래스 이름을 반환합니다.
    }

jar의 경로를 얻기 위해 http://blog.csdn.net/mybackup/article/details/7401704 문서를 참조했습니다.
여기에는 전제가 있는데, jar의 클래스를 알아야 한다는 것입니다.
유사한 기본 메소드 코드:

public static void main(String[] args)에서 ClassNotFoundException, IOException이 발생합니다.
        DB db = new DB() //jar 패키지의 클래스
        문자열 jarPath = db.getClass().getProtectionDomain().getCodeSource().getLocation().getFile();

        정수 개수 = 0;
        목록 이름 = getClassNames(jarPath);
        for (문자열 이름 : 이름) {
            System.out.println(이름);
            클래스> clazz = Class.forName(이름);
            Method[] 메소드 = clazz.getDeclaredMethods();
            for(방법 m : 방법) {
                System.out.println(m.getName()); //여기에 문제가 있을 수 있습니다.
                카운트++;
            }
        }
        System.out.println("전체 개수: " + 개수);
}
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿