it-swarm.com.de

Kompilieren mit JDK 1.8 Java: Kein Zugriff auf Klassendatei ... Klassendatei nicht gefunden

Obwohl derselbe Code mit der JDK 1.6-Version erfolgreich kompiliert wurde, wird er nach dem Upgrade auf JDK 1.8 nicht kompiliert und lautet Java cannot access ....class file ...as class file not found though it exists.

Ich kompiliere dies in der IDE von IntelliJ Idea 13 und versuche es sowohl mit der Rebuild-Option als auch mit dem konfigurierten ANT-Build. Das Ergebnis ist dasselbe.

Jede Hilfe wird sehr geschätzt.

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)
7
Anil Kamaraju

Dieses Problem ist jetzt behoben :). Es bezieht sich im Wesentlichen auf die Einrichtung von Klassenpfaden und gilt nur für JDK 1.8.

Zum Beispiel: Wenn Klasse 'A' einen Verweis auf Klasse B hat und Klasse B eine Schnittstelle implementiert, sagen Sie 'C', dann erfordert Javac in JDK 1.8, dass sowohl Klasse B als auch Schnittstelle C auf dem Klassenpfad wie vor 1.8 nur vorhanden sind Klasse B auf dem Klassenweg war genug.

Weitere Informationen finden Sie unter https://bugs.openjdk.Java.net/browse/JDK-8055048 .

10
Anil Kamaraju

Sie können gradle verwenden, um dieses Problem zu lösen.

Fügen Sie der Abhängigkeit "transitiv = wahr" hinzu. Genau wie dieser:

    compile('com.***.Android:***sdk:[email protected]') {
        transitive = true
    }
0
dragonfly

Ich hatte dieses Problem, als ich eine Funktion ausführte, die eine Klasse zurückgab, die ich nicht im Klassenpfad hatte, aber ich wollte nur auf seine inneren Felder zugreifen. Beispiel: container.getContent().getField() Ich musste die Content-Klasse importieren, damit sie funktioniert.

0
Gaetano