web-dev-qa-db-fra.com

Compilation avec JDK 1.8 Java: impossible d'accéder au fichier de classe ... fichier de classe introuvable

Bien que le même code ait été compilé avec succès avec la version JDK 1.6, après la mise à niveau vers JDK 1.8, il ne compilera pas, en indiquant Java cannot access ....class file ...as class file not found though it exists.

Je compile ceci dans IntelliJ Idea 13 IDE, essayé avec l’option de reconstruction ainsi que la construction ANT configurée - le résultat est identique.

Toute aide est grandement appréciée.

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

Ce problème est résolu maintenant :). Il est fondamentalement lié à la configuration du chemin de classe et ne s'applique qu'à JDK 1.8. 

Par exemple: si la classe 'A' fait référence à la classe B et que la classe B implémente une interface dite 'C', javac dans JDK 1.8 requiert à la fois la classe B et l'interface C sur le chemin de la classe où, comme avant 1.8, la classe B sur le chemin de la classe était suffisante.

Veuillez consulter https://bugs.openjdk.Java.net/browse/JDK-8055048 pour plus d'informations.

10
Anil Kamaraju

Vous pouvez utiliser gradle pour résoudre ce problème.

Ajoutez "transitive = true" à la dépendance. Juste comme ça:

    compile('com.***.Android:***sdk:1.0.2.6@aar') {
        transitive = true
    }
0
dragonfly

J'ai eu ce problème lors de l'exécution d'une fonction renvoyant une classe que je n'avais pas dans classpath, mais je voulais simplement accéder à ses champs internes. Exemple: container.getContent().getField() J'ai dû importer la classe Content pour que cela fonctionne.

0
Gaetano