【问题标题】:Compiling with JDK 1.8 java: cannot access class file... class file not found使用 JDK 1.8 java 编译:无法访问类文件...找不到类文件
【发布时间】:2016-10-26 07:01:31
【问题描述】:

虽然使用 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)

【问题讨论】:

  • 检查“缺失”的类是否确实在编译时类路径/构建路径上。
  • 是的斯蒂芬,它在构建路径中。如果我切换回 JDK 1.6,在编译中没有看到问题,迁移到 1.8 时会发生
  • 迁移到 1.8 时是否有 eclipse 报告的编译时问题

标签: java java-8 javac jdk1.6 jdk1.8.0


【解决方案1】:

这个问题现在已经解决了:)。它基本上与类路径设置有关,仅适用于 JDK 1.8。

例如:如果类 'A' 引用了类 B 并且类 B 正在实现一个接口,比如 'C',那么 JDK 1.8 中的 javac 需要类路径上的类 B 和接口 C,而在之前1.8 只在类路径上有 B 类就足够了。

更多信息请参考https://bugs.openjdk.java.net/browse/JDK-8055048

【讨论】:

    【解决方案2】:

    构建 -> 重建项目为我工作

    【讨论】:

      【解决方案3】:

      我在执行一个函数时遇到了这个问题,该函数返回了一个我在类路径中没有的类,但我只是想访问他的内部字段。 例如: container.getContent().getField() 我必须导入 Content 类才能使其工作。

      【讨论】:

        【解决方案4】:

        对我来说,这意味着我下载了一个损坏的 jar。 Nuke ~/.m2/repository 再试一次...

        【讨论】:

          【解决方案5】:

          对我来说,无法访问的类位于外部 JAR 中。 该场景适合此处接受的答案。

          我通过将 JAR 添加为引发错误的模块的依赖项解决了我的问题。 这意味着如果错误是从 A 类引发的,并且 C 类未被访问,我将包含 C 类的 JAR 作为依赖项添加到包含 A 类的模块的 pom.xml 中。

          【讨论】:

            【解决方案6】:

            你可以使用 gradle 来解决这个问题。

            将“transitive = true”添加到依赖项。就像这样:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2022-12-01
              • 2010-11-20
              • 2019-03-11
              • 1970-01-01
              • 2019-02-14
              • 2018-02-04
              • 2019-09-17
              • 2018-07-20
              相关资源
              最近更新 更多