同じコードがJDK 1.6バージョンで正常にコンパイルされるようになりましたが、JDK 1.8にアップグレードした後、Java cannot access ....class file ...as class file not found though it exists
と言ってコンパイルされません。
これをIntelliJ Idea 13 IDEでコンパイルしています。再構築オプションと構成済みANTビルドの両方を試してみました-結果は同じです。
どんな助けでも大歓迎です。
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)
この問題は現在解決されています:)。これは基本的にクラスパスの設定に関連し、JDK 1.8にのみ適用されます。
例:クラス 'A'がクラスBへの参照を持ち、クラスBがインターフェイス 'C'を実装している場合、JDK 1.8のjavacは、クラスパス上にクラスBとインターフェイスCの両方を必要とします。クラスパス上のクラスBで十分でした。
詳細は https://bugs.openjdk.Java.net/browse/JDK-8055048 を参照してください。
この問題を解決するには、gradleを使用できます。
「transitive = true」を依存関係に追加します。ちょうどこのような:
compile('com.***.Android:***sdk:1.0.2.6@aar') {
transitive = true
}
クラスパスにないクラスを返す関数を実行するときにこの問題が発生しましたが、彼の内部フィールドにアクセスしたいだけです。例:container.getContent().getField()
機能させるには、Contentクラスをインポートする必要がありました。
ビルド->プロジェクトの再構築は私のために働きました