Description
When trying to get the class file for Java classes (ie. java.lang.String), an IOException is thrown:
Exception in thread "main" java.io.IOException: Couldn't find: java.lang.String.class
at org.apache.bcel.util.ClassPath.getClassFile(ClassPath.java:279)
at org.apache.bcel.util.ClassPath.getClassFile(ClassPath.java:301)
at bcel.test.GetClassFileTest.main(GetClassFileTest.java:12)
The root cause appears to be the restructuring of Java starting with Java 9. Specifically, the removal of the rt.jar. The above excpetion can be reproduced using a simple application:
package bcel.test;
import java.io.IOException;
import org.apache.bcel.util.ClassPath;
public class GetClassFileTest {
public static void main(String[] args) throws IOException {
String className = "java.lang.String";
System.out.println("Looking up ClassPath.ClassFile for: " + className);
ClassPath.ClassFile classFile = ClassPath.SYSTEM_CLASS_PATH.getClassFile(className);
if (classFile != null)
}
}
Running this on Java 8 produces the following output, whereas running it on Java 9+ produces the IOException:
Class file base: C:\jdk1.8.0_161\jre\lib\rt.jar
Class file path: java/lang/String.class
Attachments
Issue Links
- is related to
-
BCEL-305 ClassPath.getClassFile() and friends do not work with JRE 9 and higher
- Closed
- links to