Компиляция с JDK 1.8 java: невозможно получить доступ к файлу класса... файл класса не найден
Хотя тот же код успешно компилируется с версией JDK 1.6, после обновления до JDK 1.8 он не будет компилироваться, говоря java cannot access ....class file ...as class file not found though it exists
,
Я компилирую это в IntelliJ Idea 13 IDE, пробовал как с опцией Rebuild, так и с настроенной сборкой 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)
6 ответов
Эта проблема решена сейчас:). Это в основном связано с настройкой пути к классам и применимо только для JDK 1.8.
Например: если класс "A" имеет ссылку на класс B, а класс B реализует интерфейс, скажем "C", то javac в JDK 1.8 требует как класс B, так и интерфейс C на пути класса, где, как и до 1.8, только класса B на пути класса было достаточно.
Пожалуйста, обратитесь к https://bugs.openjdk.java.net/browse/JDK-8055048 для получения дополнительной информации.
У меня была эта проблема при выполнении функции, которая возвращала класс, которого у меня не было в classpath, но я просто хотел получить доступ к его внутренним полям. например:container.getContent().getField()
Мне пришлось импортировать класс Content, чтобы он работал.
Для меня класс, к которому нельзя получить доступ, находился внутри внешнего JAR. Сценарий был подходящим с принятым ответом здесь.
Я решил свою проблему, добавив JAR в качестве зависимости к модулю, в котором возникла ошибка. Это означает, что если ошибка была вызвана из класса A, а к классу C не было доступа, я добавил JAR, содержащий класс C, в качестве зависимости к pom.xml модуля, содержащего класс A.
Для меня это означало, что я скачал поврежденный jar-файл. Nuke ~/.m2/repository и попробуйте еще раз...
Вы можете использовать Gradle для решения этой проблемы.
Добавьте "transitive = true" в зависимость. Именно так:
compile('com.***.android:***sdk:1.0.2.6@aar') {
transitive = true
}