You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Ed Pavlak (JIRA)" <ji...@apache.org> on 2018/07/17 18:54:00 UTC

[jira] [Created] (BCEL-304) ClassPath.getClassFile does not work with Java 9 and higher

Ed Pavlak created BCEL-304:
------------------------------

             Summary: ClassPath.getClassFile does not work with Java 9 and higher
                 Key: BCEL-304
                 URL: https://issues.apache.org/jira/browse/BCEL-304
             Project: Commons BCEL
          Issue Type: Bug
          Components: Main
    Affects Versions: 6.2
            Reporter: Ed Pavlak


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) {
         System.out.println("Class file base: " + classFile.getBase());
         System.out.println("Class file path: " + classFile.getPath());
      }
   }

}

 

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



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)