Compiling with JDK 1.8 java: cannot access class file... class file not found
Asked Answered
C

6

20

Though the same code was getting to compiled successfully with JDK 1.6 version, after upgrading to JDK 1.8 it won't compile, saying java cannot access ....class file ...as class file not found though it exists.

I am compiling this in IntelliJ Idea 13 IDE, tried with both Rebuild option as well as configured ANT build - result is same.

Any help is highly appreciated.

cannot access IDispatchRequest
class file for com.abc.xyz.orchestrator.dispatch.IDispatchRequest not found
1 error


Compile failed; see the compiler error output for details.
    at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:1079)
    at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:882)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
    at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:357)
    at org.apache.tools.ant.Target.performTasks(Target.java:385)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
    at org.apache.tools.ant.Main.runBuild(Main.java:758)
    at org.apache.tools.ant.Main.startAnt(Main.java:217)
    at org.apache.tools.ant.Main.start(Main.java:179)
    at org.apache.tools.ant.Main.main(Main.java:268)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.ant.execution.AntMain2.main(AntMain2.java:30)
Cuckoopint answered 26/10, 2016 at 7:1 Comment(3)
Check that the "missing" class is actually on the compile time classpath / buildpath.Lylalyle
Yes Stephen, it is in build path. If i switch back to JDK 1.6 no issues seen in compilation, happening when migrating to 1.8Cuckoopint
are there any compile time issues reported by eclipse when you migrate to 1.8Solar
C
27

This issue is resolved now :). It's basically related to class path setup and only applicable for JDK 1.8.

For ex : If class 'A' has a reference to class B and class B is implementing an interface say 'C' then javac in JDK 1.8 requires both class B as well as Interface C on the class path where as prior to 1.8 only having class B on the class path was enough.

Please refer https://bugs.openjdk.java.net/browse/JDK-8055048 for more info.

Cuckoopint answered 28/10, 2016 at 6:51 Comment(0)
B
1

Build -> Rebuild Project worked for me

Babbler answered 14/1, 2020 at 16:2 Comment(0)
P
0

I had this problem when executing a function that was returning a class that i didn't had in classpath, but I just wanted to access his inner fields. e.g: container.getContent().getField() I had to import the Content class to make it work.

Philous answered 25/10, 2018 at 12:54 Comment(0)
D
0

For me this meant I had downloaded a corrupted jar I think. Nuke ~/.m2/repository and try again...

Dryly answered 13/11, 2020 at 20:0 Comment(0)
C
0

For me, the class that cannot be accessed was inside an external JAR. The scenario was suitable with the accepted answer here.

I solved mine by adding the JAR as a dependency to the module that error was thrown. Meaning if the error was thrown from class A, and class C was not accessed, I added the JAR containing class C as dependency to the pom.xml of module containing class A.

Charter answered 12/2, 2021 at 16:17 Comment(0)
F
-1

You can use gradle to solve this problem.

Add "transitive = true" to the dependency. Just like this:

    compile('com.***.android:***sdk:1.0.2.6@aar') {
        transitive = true
    }
Feat answered 26/10, 2018 at 6:36 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.