java - 从java中的另一个项目访问包和类文件

标签 java class package project

我目前正在做一个项目。我需要访问另一个项目的包和类文件的地方。我做了一些研究但没有得到任何最终决定。我尝试使用这个程序。但它需要字符串格式的包名称,并且非常适用于同一项目。我如何访问另一个项目的包和类文件,我将只提供项目的路径。任何类型的建议将不胜感激。 TIA。

 Package pkgname = Package.getPackage("packageName");
    List<Class> classesForPackage = getClassesForPackage(pkgname);
    for (Class c : classesForPackage) {
        System.out.println("class name" + c.getName());
        Method[] declaredMethods = c.getDeclaredMethods();
        for (Method method : declaredMethods) {
            System.out.println("method name" + method.getName());
        }
    }

最佳答案

正如您提到的,您已经将项目添加为依赖项,我假设您已经拥有(或可以生成)该项目的 jar。您可以使用以下代码获取所有类和相应方法的列表。该方法需要 jar 文件的绝对路径:

private static void pareseJar(String jarFile) throws IOException, ClassNotFoundException {
    JarFile jar = new JarFile(jarFile);
    Enumeration<JarEntry> entries = jar.entries();

    // load the jar
    URL[] urls = { new URL("jar:file:" + jarFile + "!/") };
    URLClassLoader classLoader = URLClassLoader.newInstance(urls);

    while (entries.hasMoreElements()) {
        JarEntry entry = entries.nextElement();
        // if it is a class, load the same and the corresponding methods
        if (entry.getName().endsWith(".class")) {
            String className = entry.getName().replaceAll("/", ".");
            className = className.replace(".class", "");


            Class<?> loadedClass = classLoader.loadClass(className);
            System.out.println("Package Name : " + loadedClass.getPackage().getName());
            System.out.println("Class Name : " + className);

            Method[] methods = loadedClass.getDeclaredMethods();

            for (Method method : methods) {
                System.out.println("    Method Name : " + method.getName());
            }
        }
    }

}

我在 commons-codec-1.10.jar 上执行了相同的操作,结果如下:

Package Name : org.apache.commons.codec.binary
Class Name : org.apache.commons.codec.binary.Base32
  Method Name : decode
  Method Name : encode
  Method Name : isInAlphabet

Package Name : org.apache.commons.codec.binary
Class Name : org.apache.commons.codec.binary.Base64
  Method Name : decode
  Method Name : encode
  Method Name : isArrayByteBase64
  Method Name : encodeBase64String
  Method Name : isInAlphabet
  Method Name : isUrlSafe

关于java - 从java中的另一个项目访问包和类文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44237521/

相关文章:

java - 如何在不更改 setAutoCreateRowSorter 完成的顺序的情况下刷新表(JTable)?

c++ - 检查 C++11 枚举类的总顺序(如何实现 operator<)

c++ - strncpy 到已经创建的 char []

visual-studio - 如何防止 Nuget 自动更新包(次要)版本?

java - 我们如何获取父包注释?有人提供示例吗?

java - 在 WHERE 子句中使用字符串条件查询时,PostgreSQL JDBC 为空结果集

java - 如何从安装了 Apache tomcat 服务器的 Linux 服务器中删除 catalina.out

c++ - 另一个类的类指针数组的类指针数组的段错误

python - 批评我的 Python 包结构

java -/urlpage 和 urlpage 有什么区别?