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