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)
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.
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
}
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.